mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 03:01:39 -04:00
fsnotify: don't put user context if it was never assigned
On some failure paths we may attempt to free user context even if it
wasn't assigned yet. This will cause a NULL ptr deref and a kernel BUG.
The path I was looking at is in inotify_new_group():
oevent = kmalloc(sizeof(struct inotify_event_info), GFP_KERNEL);
if (unlikely(!oevent)) {
fsnotify_destroy_group(group);
return ERR_PTR(-ENOMEM);
}
fsnotify_destroy_group() would get called here, but
group->inotify_data.user is only getting assigned later:
group->inotify_data.user = get_current_user();
Signed-off-by: Sasha Levin <[email protected]>
Cc: John McCutchan <[email protected]>
Cc: Robert Love <[email protected]>
Cc: Eric Paris <[email protected]>
Reviewed-by: Heinrich Schuchardt <[email protected]>
Reviewed-by: Jan Kara <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
cafbaae8af
commit
105d1b4253
1 changed files with 4 additions and 2 deletions
|
|
@ -165,8 +165,10 @@ static void inotify_free_group_priv(struct fsnotify_group *group)
|
|||
/* ideally the idr is empty and we won't hit the BUG in the callback */
|
||||
idr_for_each(&group->inotify_data.idr, idr_callback, group);
|
||||
idr_destroy(&group->inotify_data.idr);
|
||||
atomic_dec(&group->inotify_data.user->inotify_devs);
|
||||
free_uid(group->inotify_data.user);
|
||||
if (group->inotify_data.user) {
|
||||
atomic_dec(&group->inotify_data.user->inotify_devs);
|
||||
free_uid(group->inotify_data.user);
|
||||
}
|
||||
}
|
||||
|
||||
static void inotify_free_event(struct fsnotify_event *fsn_event)
|
||||
|
|
|
|||
Loading…
Reference in a new issue