On Tue, Oct 22, 2019 at 10:00:39AM +0000, Tamar Christina wrote:
> Glibc has recently introduced changed to the mode field in ipc_perm
> in commit 2f959dfe849e0646e27403f2e4091536496ac0f0. For Arm this
> means that the mode field no longer has the same size.
> 
> This causes an assert failure against libsanitizer's internal copy
> of ipc_perm.  Since this change can't be easily detected I am adding
> arm to the list of targets that are excluded from this check.  libsanitizer
> doesn't use this field (and others, it in fact uses only 1 field) so this 
> check
> can be ignored.
> 
> Padding bits were used by glibc when the field was changed so sizeof and 
> offsets
> of the remaining fields should be the same.
> 
> Bootstrapped arm-none-linux-gnueabihf and no issues.
> 
> Ok for trunk?
> 
> Thanks,
> Tamar
> 
> libsanitizer/ChangeLog:
> 
> 2019-10-22  Tamar Christina  <tamar.christ...@arm.com>
> 
>       PR sanitizer/92154
>       * sanitizer_common/sanitizer_platform_limits_posix.cpp (defined):
>       Exclude arm.

defined is not an entity you are changing, plus for cherry-picks from
upstream we usually just write:
        * sanitizer_common/sanitizer_platform_limits_posix.cpp: Cherry-pick
        compiler-rt revision 123456.
where 123456 is the svn revision from compiler-rt.

> --- a/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp
> +++ b/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cpp
> @@ -1126,8 +1126,12 @@ CHECK_SIZE_AND_OFFSET(ipc_perm, uid);
>  CHECK_SIZE_AND_OFFSET(ipc_perm, gid);
>  CHECK_SIZE_AND_OFFSET(ipc_perm, cuid);
>  CHECK_SIZE_AND_OFFSET(ipc_perm, cgid);
> -#if !defined(__aarch64__) || !SANITIZER_LINUX || __GLIBC_PREREQ (2, 21)
> +#if (!defined(__aarch64__) || !SANITIZER_LINUX || __GLIBC_PREREQ (2, 21)) && 
> \
> +    !defined(__arm__)
>  /* On aarch64 glibc 2.20 and earlier provided incorrect mode field.  */
> +/* On Arm glibc 2.31 and later provide a different mode field, this field is
> +   never used by libsanitizer so we can simply ignore this assert for all 
> glibc
> +   versions.  */
>  CHECK_SIZE_AND_OFFSET(ipc_perm, mode);
>  #endif
>  
> 

This is ok because it is merged from upstream with the above ChangeLog
change, but the #if doesn't do what the comment says, I would have expected
at least
+    (!defined(__arm__) || !SANITIZER_LINUX)
or even better
+    (!SANITIZER_ARM || !SANITIZER_LINUX)
which would be closer to the compiler-rt style.  Also wonder why there is no
SANITIZER_AARCH64 macro.  But that is all upstream should care about.

        Jakub

Reply via email to