pstore/platform: Add check for kstrdup
[ Upstream commit a19d48f7c5d57c0f0405a7d4334d1d38fe9d3c1c ]
Add check for the return value of kstrdup() and return the error
if it fails in order to avoid NULL pointer dereference.
Fixes: 563ca40ddf
("pstore/platform: Switch pstore_info::name to const")
Signed-off-by: Jiasheng Jiang <jiasheng@iscas.ac.cn>
Link: https://lore.kernel.org/r/20230623022706.32125-1-jiasheng@iscas.ac.cn
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
0a1dab4a8e
commit
63f637309b
|
@ -561,6 +561,8 @@ static int pstore_write_user_compat(struct pstore_record *record,
|
|||
*/
|
||||
int pstore_register(struct pstore_info *psi)
|
||||
{
|
||||
char *new_backend;
|
||||
|
||||
if (backend && strcmp(backend, psi->name)) {
|
||||
pr_warn("ignoring unexpected backend '%s'\n", psi->name);
|
||||
return -EPERM;
|
||||
|
@ -580,11 +582,16 @@ int pstore_register(struct pstore_info *psi)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
new_backend = kstrdup(psi->name, GFP_KERNEL);
|
||||
if (!new_backend)
|
||||
return -ENOMEM;
|
||||
|
||||
mutex_lock(&psinfo_lock);
|
||||
if (psinfo) {
|
||||
pr_warn("backend '%s' already loaded: ignoring '%s'\n",
|
||||
psinfo->name, psi->name);
|
||||
mutex_unlock(&psinfo_lock);
|
||||
kfree(new_backend);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
|
@ -617,7 +624,7 @@ int pstore_register(struct pstore_info *psi)
|
|||
* Update the module parameter backend, so it is visible
|
||||
* through /sys/module/pstore/parameters/backend
|
||||
*/
|
||||
backend = kstrdup(psi->name, GFP_KERNEL);
|
||||
backend = new_backend;
|
||||
|
||||
pr_info("Registered %s as persistent store backend\n", psi->name);
|
||||
|
||||
|
|
Loading…
Reference in New Issue