fsnotify: Allocate overflow events with proper type
Commit 7053aee26a
"fsnotify: do not share events between notification
groups" used overflow event statically allocated in a group with the
size of the generic notification event. This causes problems because
some code looks at type specific parts of event structure and gets
confused by a random data it sees there and causes crashes.
Fix the problem by allocating overflow event with type corresponding to
the group type so code cannot get confused.
Signed-off-by: Jan Kara <jack@suse.cz>
This commit is contained in:
@@ -633,11 +633,23 @@ static int inotify_update_watch(struct fsnotify_group *group, struct inode *inod
|
||||
static struct fsnotify_group *inotify_new_group(unsigned int max_events)
|
||||
{
|
||||
struct fsnotify_group *group;
|
||||
struct inotify_event_info *oevent;
|
||||
|
||||
group = fsnotify_alloc_group(&inotify_fsnotify_ops);
|
||||
if (IS_ERR(group))
|
||||
return group;
|
||||
|
||||
oevent = kmalloc(sizeof(struct inotify_event_info), GFP_KERNEL);
|
||||
if (unlikely(!oevent)) {
|
||||
fsnotify_destroy_group(group);
|
||||
return ERR_PTR(-ENOMEM);
|
||||
}
|
||||
group->overflow_event = &oevent->fse;
|
||||
fsnotify_init_event(group->overflow_event, NULL, FS_Q_OVERFLOW);
|
||||
oevent->wd = -1;
|
||||
oevent->sync_cookie = 0;
|
||||
oevent->name_len = 0;
|
||||
|
||||
group->max_events = max_events;
|
||||
|
||||
spin_lock_init(&group->inotify_data.idr_lock);
|
||||
|
Reference in New Issue
Block a user