lkml.org 
[lkml]   [1997]   [Feb]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
From
SubjectRe: select() support for NR_OPEN>256
Date
> - * 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$$!!!!!!`
"~^^~ ^~~^

\
 
 \ /
  Last update: 2005-03-22 13:38    [W:0.036 / U:1.068 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site