• Catalin Marinas's avatar
    net: compat: Ignore MSG_CMSG_COMPAT in compat_sys_{send, recv}msg · 63f719b7
    Catalin Marinas authored
    commit d720d8ce upstream.
    
    With commit a7526eb5 (net: Unbreak compat_sys_{send,recv}msg), the
    MSG_CMSG_COMPAT flag is blocked at the compat syscall entry points,
    changing the kernel compat behaviour from the one before the commit it
    was trying to fix (1be374a0, net: Block MSG_CMSG_COMPAT in
    send(m)msg and recv(m)msg).
    
    On 32-bit kernels (!CONFIG_COMPAT), MSG_CMSG_COMPAT is 0 and the native
    32-bit sys_sendmsg() allows flag 0x80000000 to be set (it is ignored by
    the kernel). However, on a 64-bit kernel, the compat ABI is different
    with commit a7526eb5.
    
    This patch changes the compat_sys_{send,recv}msg behaviour to the one
    prior to commit 1be374a0.
    
    The problem was found running 32-bit LTP (sendmsg01) binary on an arm64
    kernel. Arguably, LTP should not pass 0xffffffff as flags to sendmsg()
    but the general rule is not to break user ABI (even when the user
    behaviour is not entirely sane).
    
    Fixes: a7526eb5 (net: Unbreak compat_sys_{send,recv}msg)
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: David S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    [bwh: Backported to 3.2: adjust context]
    Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
    63f719b7
compat.c 24.5 KB