projects
/
GitHub
/
LineageOS
/
G12
/
android_kernel_amlogic_linux-4.9.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
| inline |
side by side
(parent:
70fa4a6
)
sysfs: Prevent crash on unset sysfs group attributes
author
Bruno Prémont
<bonbons@linux-vserver.org>
Tue, 3 Apr 2012 07:59:48 +0000
(09:59 +0200)
committer
Greg Kroah-Hartman
<gregkh@linuxfoundation.org>
Tue, 10 Apr 2012 21:48:51 +0000
(14:48 -0700)
Do not let the kernel crash when a device is registered with
sysfs while group attributes are not set (aka NULL).
Warn about the offender with some information about the offending
device.
This would warn instead of trying NULL pointer deref like:
BUG: unable to handle kernel NULL pointer dereference at (null)
IP: [<
ffffffff81152673
>] internal_create_group+0x83/0x1a0
PGD 0
Oops: 0000 [#1] SMP
CPU 0
Modules linked in:
Pid: 1, comm: swapper/0 Not tainted 3.4.0-rc1-x86_64 #3 HP ProLiant DL360 G4
RIP: 0010:[<
ffffffff81152673
>] [<
ffffffff81152673
>] internal_create_group+0x83/0x1a0
RSP: 0018:
ffff88019485fd70
EFLAGS:
00010202
RAX:
0000000000000001
RBX:
0000000000000000
RCX:
0000000000000001
RDX:
ffff880192e99908
RSI:
ffff880192e99630
RDI:
ffffffff81a26c60
RBP:
ffff88019485fdc0
R08:
0000000000000000
R09:
0000000000000000
R10:
ffff880192e99908
R11:
0000000000000000
R12:
ffffffff81a16a00
R13:
ffff880192e99908
R14:
ffffffff81a16900
R15:
0000000000000000
FS:
0000000000000000
(0000) GS:
ffff88019bc00000
(0000) knlGS:
0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0:
000000008005003b
CR2:
0000000000000000
CR3:
0000000001a0c000
CR4:
00000000000007f0
DR0:
0000000000000000
DR1:
0000000000000000
DR2:
0000000000000000
DR3:
0000000000000000
DR6:
00000000ffff0ff0
DR7:
0000000000000400
Process swapper/0 (pid: 1, threadinfo
ffff88019485e000
, task
ffff880194878000
)
Stack:
ffff88019485fdd0
ffff880192da9d60
0000000000000000
ffff880192e99908
ffff880192e995d8
0000000000000001
ffffffff81a16a00
ffff880192da9d60
0000000000000000
0000000000000000
ffff88019485fdd0
ffffffff811527be
Call Trace:
[<
ffffffff811527be
>] sysfs_create_group+0xe/0x10
[<
ffffffff81376ca6
>] device_add_groups+0x46/0x80
[<
ffffffff81377d3d
>] device_add+0x46d/0x6a0
...
Signed-off-by: Bruno Prémont <bonbons@linux-vserver.org>
Acked-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/sysfs/group.c
patch
|
blob
|
blame
|
history
diff --git
a/fs/sysfs/group.c
b/fs/sysfs/group.c
index dd1701caecc94bcfe38625052dd7564ded19c379..2df555c66d57d463381042632ae124ad53aecb42 100644
(file)
--- a/
fs/sysfs/group.c
+++ b/
fs/sysfs/group.c
@@
-67,7
+67,11
@@
static int internal_create_group(struct kobject *kobj, int update,
/* Updates may happen before the object has been instantiated */
if (unlikely(update && !kobj->sd))
return -EINVAL;
-
+ if (!grp->attrs) {
+ WARN(1, "sysfs: attrs not set by subsystem for group: %s/%s\n",
+ kobj->name, grp->name ? "" : grp->name);
+ return -EINVAL;
+ }
if (grp->name) {
error = sysfs_create_subdir(kobj, grp->name, &sd);
if (error)