This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: libsanitizer merge from upstream r221802


On 31 December 2014 at 13:29, David Abdurachmanov
<david.abdurachmanov@gmail.com> wrote:
>
> On Dec 30, 2014, at 11:48 PM, Andrew Pinski wrote:
>>> If we have 64-bit kernel and 64-bit application is executed sys_getresuid is
>>> used for getresuid syscall, otherwise if 32-bit application is executed --
>>> sys_getresuid16 is used. Thus 64-bit application will never call
>>> sys_getresuid16 implemenation. Then
>>> getresuid16/getresgid16/getgroups16/setgroups16/etc only needs to in 32-bit
>>> binary of libsanitizer. Same should apply for x86_64/i*86.
>>>
>>> Is that correct?
>>
>> Kinda.  It only applies for aarch32 and not for AARCH64:ILP32.
>> AARCH64:ILP32 uses the standard system calls here too.
>
>
> I am attaching an updated patch, bootstrapped trunk on arrch64 with kernels 3.12 and 3.17 (QEMU).
>
> I looked at kernel source. If CONFIG_COMPAT is set then CONFIG_HAVE_UID16 is set.

Thanks for taking care of this.

>
> From include/linux/syscalls.h
>
> 523 #ifdef CONFIG_UID16
> 524 asmlinkage long sys_chown16(const char __user *filename,
> 525                                 old_uid_t user, old_gid_t group);
> 526 asmlinkage long sys_lchown16(const char __user *filename,
> 527                                 old_uid_t user, old_gid_t group);
> 528 asmlinkage long sys_fchown16(unsigned int fd, old_uid_t user, old_gid_t group);
> 529 asmlinkage long sys_setregid16(old_gid_t rgid, old_gid_t egid);
> 530 asmlinkage long sys_setgid16(old_gid_t gid);
> 531 asmlinkage long sys_setreuid16(old_uid_t ruid, old_uid_t euid);
> 532 asmlinkage long sys_setuid16(old_uid_t uid);
> 533 asmlinkage long sys_setresuid16(old_uid_t ruid, old_uid_t euid, old_uid_t suid);
> 534 asmlinkage long sys_getresuid16(old_uid_t __user *ruid,
> 535                                 old_uid_t __user *euid, old_uid_t __user *suid);
> 536 asmlinkage long sys_setresgid16(old_gid_t rgid, old_gid_t egid, old_gid_t sgid);
> 537 asmlinkage long sys_getresgid16(old_gid_t __user *rgid,
> 538                                 old_gid_t __user *egid, old_gid_t __user *sgid);
> 539 asmlinkage long sys_setfsuid16(old_uid_t uid);
> 540 asmlinkage long sys_setfsgid16(old_gid_t gid);
> 541 asmlinkage long sys_getgroups16(int gidsetsize, old_gid_t __user *grouplist);
> 542 asmlinkage long sys_setgroups16(int gidsetsize, old_gid_t __user *grouplist);
> 543 asmlinkage long sys_getuid16(void);
> 544 asmlinkage long sys_geteuid16(void);
> 545 asmlinkage long sys_getgid16(void);
> 546 asmlinkage long sys_getegid16(void);
> 547 #endif
>
> Thus I disabled such syscalls in libsanitizer with SANITIZER_WORDSIZE macro and disabled
> type checks for __kernel_old_{uid,gid}_t. Did not touch the fragment which sets
> __kernel_old_{uid,gid}_t.
>
> SANITIZER_WORDSIZE is set based on _LP64 macro.
>
> If patch is acceptable I could do more tests after holidays.
>

As it seems you are not aware of it, and the llvm guys haven't yet
told you: these patches need to be approved in the upstream
sanitizer/llvm repo, and they will be merge into gcc later. So I
believe you need to send your patches to llvm first.

Thanks,

Christophe.

> Thanks,
> david
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]