X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=fs%2Fcompat.c;h=ac3fb9ed8eeaf847fcd2238edb2f941d7125b7a4;hb=3a3bca5ace9123d1a6b890ceac2902ebf2b1fd50;hp=8c665705c6a07beea9a4ead55a2184524f7ed41f;hpb=55faed1e607a24ca7f3453a3eb463ca8987f8139;p=linux-2.6 diff --git a/fs/compat.c b/fs/compat.c index 8c665705c6..ac3fb9ed8e 100644 --- a/fs/compat.c +++ b/fs/compat.c @@ -1619,6 +1619,7 @@ compat_sys_select(int n, compat_ulong_t __user *inp, compat_ulong_t __user *outp char *bits; long timeout; int size, max_fdset, ret = -EINVAL; + struct fdtable *fdt; timeout = MAX_SCHEDULE_TIMEOUT; if (tvp) { @@ -1644,7 +1645,10 @@ compat_sys_select(int n, compat_ulong_t __user *inp, compat_ulong_t __user *outp goto out_nofds; /* max_fdset can increase, so grab it once to avoid race */ - max_fdset = current->files->max_fdset; + rcu_read_lock(); + fdt = files_fdtable(current->files); + max_fdset = fdt->max_fdset; + rcu_read_unlock(); if (n > max_fdset) n = max_fdset;