[systemd-devel] [PATCH] Fix broken syscall(__NR_fanotify_mark... on 32bit mips.

David Daney ddaney at caviumnetworks.com
Wed Apr 20 11:19:50 PDT 2011


On 04/20/2011 11:09 AM, Lennart Poettering wrote:
> On Wed, 20.04.11 10:36, David Daney (ddaney at caviumnetworks.com) wrote:
>
>> You would have to do something like this (untested):
>>
>> int foo_fanotify_mark(int fanotify_fd, unsigned int flags, u64 mask,
>> int dfd, const char  __user * pathname)
>> {
>> 	u32 mask_low = (u32)mask;
>> 	u32 mask_high = (u32)(mask>>  32);
>>
>> 	return syscall(4337, fanotify_fd, flags, mask_low, mask_high, dfd,
>> pathname);
>>
>> }
>>
>> The order of mask_low, mask_high in the syscall argument list
>> depends on the endianness.  Figuring out the correct order is left
>> as an exercise for the reader.
>
> That's basically the same patch as this one, right?
>
> http://lists.freedesktop.org/archives/systemd-devel/attachments/20110420/be2d393b/attachment.obj
>

It looks like it might do the same thing.  Someone should try it on an 
o32 MIPS userland running on a mips64 kernel.

I think the behavior of the union thing is undefined, but should work on 
GCC.

David Daney


> It has been suggested that this patch would also work fine on other
> 32bit CPUs, is that correct? More specifically, will this break x86?
>
> Lennart
>



More information about the systemd-devel mailing list