Fix _IOC_TYPECHECK sparse error
Subsystems (3)
PATCH 1/1 Fix _IOC_TYPECHECK sparse error
When running sparse over drivers/media/v4l2-core/v4l2-ioctl.c I get these errors:
drivers/media/v4l2-core/v4l2-ioctl.c:2043:9: error: bad integer constant expression drivers/media/v4l2-core/v4l2-ioctl.c:2044:9: error: bad integer constant expression drivers/media/v4l2-core/v4l2-ioctl.c:2045:9: error: bad integer constant expression drivers/media/v4l2-core/v4l2-ioctl.c:2046:9: error: bad integer constant expression
etc.
The root cause of that turns out to be in include/asm-generic/ioctl.h:
#include <uapi/asm-generic/ioctl.h>
/* provoke compile error for invalid uses of size argument */ extern unsigned int __invalid_size_argument_for_IOC;
#define _IOC_TYPECHECK(t) \
((sizeof(t) == sizeof(t[1]) && \
sizeof(t) < (1 << _IOC_SIZEBITS)) ? \
sizeof(t) : __invalid_size_argument_for_IOC)If it is defined as this (as is already done if __KERNEL__ is not defined):
#define _IOC_TYPECHECK(t) (sizeof(t))
then all is well with the world.
This patch allows sparse to work correctly.
include/asm-generic/ioctl.h +5 -0
@@ -3,10 +3,15 @@#include <uapi/asm-generic/ioctl.h> +#ifdef __CHECKER__ +#define _IOC_TYPECHECK (t) (sizeof(t)) +#else /* provoke compile error for invalid uses of size argument */ extern unsigned int __invalid_size_argument_for_IOC;#define _IOC_TYPECHECK (t) \ ((sizeof(t) == sizeof(t[1]) && \ sizeof(t) < (1 << _IOC_SIZEBITS)) ? \ sizeof(t) : __invalid_size_argument_for_IOC) +#endif +#endif /* _ASM_GENERIC_IOCTL_H */
Quoted 23 lines · Hans Verkuil
When running sparse over
drivers/media/v4l2-core/v4l2-ioctl.cI get these errors:
drivers/media/v4l2-core/v4l2-ioctl.c:2043:9: error: bad integer constant expressiondrivers/media/v4l2-core/v4l2-ioctl.c:2044:9: error: bad integer constant expressiondrivers/media/v4l2-core/v4l2-ioctl.c:2045:9: error: bad integer constant expressiondrivers/media/v4l2-core/v4l2-ioctl.c:2046:9: error: bad integer constant expressionetc.
The root cause of that turns out to be in
include/asm-generic/ioctl.h:#include <
uapi/asm-generic/ioctl.h>/* provoke compile error for invalid uses of size argument */ extern unsigned int
__invalid_size_argument_for_IOC;#define _IOC_TYPECHECK(t) \ ((sizeof(t) == sizeof(t[1]) && \ sizeof(t) < (1 << _IOC_SIZEBITS)) ? \ sizeof(t) : __invalid_size_argument_for_IOC)If it is defined as this (as is already done if
__KERNEL__is not defined):
Quoted 7 lines
#define
_IOC_TYPECHECK(t)(sizeof(t))then all is well with the world.
This patch allows sparse to work correctly.
Signed-off-by Hans Verkuil <[email protected]>
Quoted 25 lines
include/asm-generic/ioctl.h +5
-1@@ -3,10 +3,15 @@#include <uapi/asm-generic/ioctl.h> +#ifdef __CHECKER__ +#define _IOC_TYPECHECK (t) (sizeof(t)) +#else /* provoke compile error for invalid uses of size argument */ extern unsigned int __invalid_size_argument_for_IOC;#define _IOC_TYPECHECK (t) \ ((sizeof(t) == sizeof(t[1]) && \ sizeof(t) < (1 << _IOC_SIZEBITS)) ? \ sizeof(t) : __invalid_size_argument_for_IOC) +#endif +#endif /* _ASM_GENERIC_IOCTL_H */ --To unsubscribe from this list: send the line "unsubscribe linux-sparse" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html