[bug] possible bug in the range filter

Manlio Perillo manlio_perillo at libero.it
Wed Dec 12 17:39:36 MSK 2007


Igor Sysoev ha scritto:
> [...]
>>
>>> It seems that your module and nginx did not touch this memory, so the value
>>> was passed to kernel and it saw its invalidity.
>>>

The problem was with these lines of code in the range filter:
         if (ngx_buf_in_memory(buf)) {
             buf->pos = buf->start + (size_t) range->start;
             buf->last = buf->start + (size_t) range->end;
         }

In mod_wsgi I forgot to set buf->start (and buf->end, too), so its value 
is 0 :-).

>> Right, but why returning EFAULT instead of raising a SIGSEG?
>>
>> Moreover:
>> http://www.gnu.org/software/libc/manual/html_node/Error-Codes.html
>>
>> Macro: int EFAULT
>>
>>     Bad address; an invalid pointer was detected. In the GNU system, 
>> this error never happens; you get a signal instead.
>>
>>
>> But certainly I'm missing something ;-).
> 
> I never saw SIGSEG in this case on FreeBSD.
> 
> 

Its strange that, within glibc-2.0.1 sources I get
$grep -rw EFAULT .
./sysdeps/mach/hurd/errnos.h:   EFAULT          = _HURD_ERRNO (14),
./sysdeps/mach/hurd/errnos.h:#define    EFAULT          _HURD_ERRNO 
(14)/* Bad address */
./sysdeps/gnu/errlist.c:#ifdef EFAULT
./sysdeps/gnu/errlist.c:    [EFAULT] = N_("Bad address"),
./sysdeps/unix/bsd/bsd4.4/errnos.h:#define      EFAULT          14 
         /* Bad address */


So it seems that the gnu libc does not define EFAULT for Linux.


But I'm not sure of what "GNU system" means.



Regards  Manlio Perillo





More information about the nginx mailing list