• Xi Wang's avatar
    fs/exec.c: work around icc miscompilation · 6d92d4f6
    Xi Wang authored
    The tricky problem is this check:
    
    	if (i++ >= max)
    
    icc (mis)optimizes this check as:
    
    	if (++i > max)
    
    The check now becomes a no-op since max is MAX_ARG_STRINGS (0x7FFFFFFF).
    
    This is "allowed" by the C standard, assuming i++ never overflows,
    because signed integer overflow is undefined behavior.  This
    optimization effectively reverts the previous commit 362e6663
    ("exec.c, compat.c: fix count(), compat_count() bounds checking") that
    tries to fix the check.
    
    This patch simply moves ++ after the check.
    Signed-off-by: default avatarXi Wang <xi.wang@gmail.com>
    Cc: Jason Baron <jbaron@redhat.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    6d92d4f6
exec.c 39.1 KB