1 /* Reduced from false positive in Linux kernel in
2 drivers/xen/privcmd.c. */
4 /* { dg-do compile } */
5 /* { dg-options "-fanalyzer" } */
6 /* { dg-require-effective-target analyzer } */
8 typedef __SIZE_TYPE__
size_t;
9 typedef unsigned short __u16
;
10 typedef unsigned int gfp_t
;
12 kfree(const void* objp
);
15 __attribute__((__alloc_size__(1, 2)))
16 __attribute__((__malloc__
))
17 kcalloc(size_t n
, size_t size
, gfp_t flags
);
20 copy_from_user(void*, const void*, unsigned long);
22 typedef __u16 domid_t
;
23 struct privcmd_dm_op_buf
33 static unsigned int privcmd_dm_op_max_num
= 16;
35 privcmd_ioctl_dm_op(void* udata
)
37 struct privcmd_dm_op kdata
;
38 struct privcmd_dm_op_buf
* kbufs
;
39 if (copy_from_user(&kdata
, udata
, sizeof(kdata
)))
43 if (kdata
.num
> privcmd_dm_op_max_num
)
46 kcalloc(kdata
.num
, /* { dg-bogus "attacker-controlled value" } */
48 (((gfp_t
)(0x400u
| 0x800u
)) | ((gfp_t
)0x40u
) | ((gfp_t
)0x80u
)));