On 19/06/2024 3:44 pm, GitLab wrote:
> GitLab
> ✖ Pipeline #1338876222 has failed!
>
>
> Project xen-project <https://gitlab.com/xen-project> / xen
> <https://gitlab.com/xen-project/xen>
> Branch
> staging <https://gitlab.com/xen-project/xen/-/commits/staging>
>
> Commit
> 43d5c5d5
> <https://gitlab.com/xen-project/xen/-/commit/43d5c5d5f70b3f5419e7ef30399d23adf6ddfa8e>
>
> xen: avoid UB in guest handle arithmetic At le...
> Commit Author
> Jan Beulich <https://gitlab.com/jbeulich>
>
>
> Pipeline #1338876222
> <https://gitlab.com/xen-project/xen/-/pipelines/1338876222> triggered by
> Ganis <https://gitlab.com/ganis>
>
> had 1 failed job
> Failed job
> ✖ build
>
> debian-bookworm-gcc-arm32-debug-randconfig
> <https://gitlab.com/xen-project/xen/-/jobs/7136417308>
This is:
In file included from common/livepatch.c:9:
common/livepatch.c: In function 'livepatch_list':
./include/xen/guest_access.h:130:25: error: cast to pointer from integer
of different size [-Werror=int-to-pointer-cast]
130 | __raw_copy_to_guest((void *)(d_ + (off) * sizeof(*_s)), \
| ^
common/livepatch.c:1283:18: note: in expansion of macro
'__copy_to_guest_offset'
1283 | if ( __copy_to_guest_offset(list->name, name_offset,
| ^~~~~~~~~~~~~~~~~~~~~~
./include/xen/guest_access.h:130:25: error: cast to pointer from integer
of different size [-Werror=int-to-pointer-cast]
130 | __raw_copy_to_guest((void *)(d_ + (off) * sizeof(*_s)), \
| ^
common/livepatch.c:1287:17: note: in expansion of macro
'__copy_to_guest_offset'
1287 | __copy_to_guest_offset(list->metadata,
metadata_offset,
| ^~~~~~~~~~~~~~~~~~~~~~
The problem is that (off) is of type uint64_t, so
(const void *)(s_ + (off) * sizeof(*_d))
ends up being a uint64_t -> uint32_t down-convert in arm32.
This wants to use the _p() macro which takes care of casting through
(unsigned long) on its way to a pointer. I'll do a patch.
~Andrew