Messages in this thread | | | From | Jakub Jelinek <> | Subject | Re: select() support for NR_OPEN>256 | Date | Wed, 5 Feb 1997 20:23:07 +0100 (MET) |
| |
> - * We do a VERIFY_WRITE here even though we are only reading this time: > - * we'll write to it eventually.. > - * > * Use "int" accesses to let user-mode fd_set's be int-aligned. > */ > static int __get_fd_set(unsigned long nr, int * fs_pointer, int * fdset) > @@ -209,16 +205,14 @@ > /* round up nr to nearest "int" */ > nr = (nr + 8*sizeof(int)-1) / (8*sizeof(int)); > if (fs_pointer) { > - int error = verify_area(VERIFY_WRITE,fs_pointer,nr*sizeof(int)); > - if (!error) { > - while (nr) { > - get_user(*fdset, fs_pointer); > - nr--; > - fs_pointer++; > - fdset++; > - } > + while (nr) { > + if (get_user(*fdset, fs_pointer)) > + return -EFAULT; > + nr--; > + fs_pointer++; > + fdset++; > } > - return error; > + return 0;
Isn't it better to leave there the verify_area and just use __get_user instead of get_user? This will generate much nicer code (at least on the sparc)...
Like:
int error = verify_area(VERIFY_WRITE,fs_pointer,nr*sizeof(int)); if (!error) { while (nr) { if (__get_user(*fdset, fs_pointer)) return -EFAULT; nr--; fs_pointer++; fdset++; } } return error;
.u$e. Cheers .$$$$$:S Jakub $"*$/"*$$ $.`$ . ^F 4k+#+T.$F -------------------------------------------------------------- 4P+++"$"$ --- Jakub Jelinek, jj@sunsite.mff.cuni.cz :R"+ t$$B Administrator of SunSITE Czech Republic ___# $$$ MFF, Charles University, Prague | | R$$k ---------------------------------------------------------- dd. | Linux $!$ Give your Sparc a new beginning - SparcLinux ddd | Sparc $9$F -------------------------------------------------------- '!!!!!$ !!#!` !!!!!* .!!!!!` '!!!!!!!W..e$$!!!!!!` "~^^~ ^~~^
| |