[PATCH] fix open flag decoding on 32-bit Android

enh enh at google.com
Fri Oct 3 23:16:35 UTC 2014


On Fri, Oct 3, 2014 at 4:09 PM, Dmitry V. Levin <ldv at altlinux.org> wrote:
> On Tue, Sep 23, 2014 at 07:09:50PM -0700, enh wrote:
>> commit d2bed27b663096f8771df824a85f3815a0c7d7da
>> Author: Elliott Hughes <enh at google.com>
>> Date:   Tue Sep 23 18:49:19 2014 -0700
>>
>>     Don't risk truncating open flags by using mode_t.
>>
>>     On Android, 32-bit arm and x86 use __kernel_mode_t (an unsigned short)
>>     as their mode_t. The open(2) flags are actually an int, so high ones
>>     like O_CLOEXEC get truncated if you coerce them to mode_t.
>>
>>     Signed-off-by: Elliott Hughes <enh at google.com>
>>
>> diff --git a/defs.h b/defs.h
>> index cd9817b..5bfeb6b 100644
>> --- a/defs.h
>> +++ b/defs.h
>> @@ -708,8 +708,8 @@ extern void print_sigset_addr_len(struct tcb *, long, long);
>>  extern void printsignal(int);
>>  extern void tprint_iov(struct tcb *, unsigned long, unsigned long,
>> int decode_iov);
>>  extern void tprint_iov_upto(struct tcb *, unsigned long, unsigned
>> long, int decode_iov, unsigned long);
>
> Your patch failed to apply because of these two wrapped lines,
> and I forgot about it afterwards.

sorry. given my employer i'm kind of stuck with gmail, and afaik
there's no way to make gmail not do that (and aiui you don't like
patches as attachments).

>> -extern void tprint_open_modes(mode_t);
>> -extern const char *sprint_open_modes(mode_t);
>> +extern void tprint_open_modes(int);
>> +extern const char *sprint_open_modes(int);
>
> Thanks, it certainly should be int.  Apparently, it's my bug
> (v4.5.14-52-g9b5b67e), I must have confused types of 2nd and
> 3rd arguments of open(2).

thanks!




More information about the Strace-devel mailing list