diff options
author | Jiri Kosina <jkosina@suse.cz> | 2016-04-07 12:06:25 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2016-04-07 14:42:38 -0400 |
commit | 61bf12d3304d78ff499245ea995858c3bedb162e (patch) | |
tree | e0f558a6afea387144af7561e1cc6a978c82ea48 /kernel/livepatch/core.c | |
parent | 3b812ecce736432e6b55e77028ea387eb1517d24 (diff) |
livepatch: robustify klp_register_patch() API error checking
Commit 425595a7fc20 ("livepatch: reuse module loader code to write
relocations") adds a possibility of dereferncing pointers supplied by the
consumer of the livepatch API before sanity (NULL) checking them (patch
and patch->mod).
Spotted by smatch tool.
Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Josh Poimboeuf <jpoimboe@redhat.com>
Acked-by: Jessica Yu <jeyu@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
Diffstat (limited to 'kernel/livepatch/core.c')
-rw-r--r-- | kernel/livepatch/core.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/kernel/livepatch/core.c b/kernel/livepatch/core.c index eb5db6e837aa..28c37fa3d3f9 100644 --- a/kernel/livepatch/core.c +++ b/kernel/livepatch/core.c | |||
@@ -876,6 +876,9 @@ int klp_register_patch(struct klp_patch *patch) | |||
876 | { | 876 | { |
877 | int ret; | 877 | int ret; |
878 | 878 | ||
879 | if (!patch || !patch->mod) | ||
880 | return -EINVAL; | ||
881 | |||
879 | if (!is_livepatch_module(patch->mod)) { | 882 | if (!is_livepatch_module(patch->mod)) { |
880 | pr_err("module %s is not marked as a livepatch module", | 883 | pr_err("module %s is not marked as a livepatch module", |
881 | patch->mod->name); | 884 | patch->mod->name); |
@@ -885,9 +888,6 @@ int klp_register_patch(struct klp_patch *patch) | |||
885 | if (!klp_initialized()) | 888 | if (!klp_initialized()) |
886 | return -ENODEV; | 889 | return -ENODEV; |
887 | 890 | ||
888 | if (!patch || !patch->mod) | ||
889 | return -EINVAL; | ||
890 | |||
891 | /* | 891 | /* |
892 | * A reference is taken on the patch module to prevent it from being | 892 | * A reference is taken on the patch module to prevent it from being |
893 | * unloaded. Right now, we don't allow patch modules to unload since | 893 | * unloaded. Right now, we don't allow patch modules to unload since |