SIOCGLIFBRDADDR, SIOCGLIFCONF, SIOCGLIFFLAGS, SIOCGLIFNETMASK.
n-i-bz
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@15689
case VKI_SIOCGIFNUM:
PRE_MEM_WRITE("ioctl(SIOCGIFNUM)", ARG3, sizeof(int));
break;
+ case VKI_SIOCGLIFBRDADDR:
+ {
+ struct vki_lifreq *p = (struct vki_lifreq *) ARG3;
+ PRE_FIELD_READ("ioctl(SIOCGLIFBRDADDR, lifreq->lifr_name)",
+ p->lifr_name);
+ PRE_FIELD_WRITE("ioctl(SIOCGLIFBRDADDR, lifreq->lifr_addr)",
+ p->lifr_addr);
+ }
+ break;
+ case VKI_SIOCGLIFCONF:
+ {
+ struct vki_lifconf *p = (struct vki_lifconf *) ARG3;
+ PRE_FIELD_READ("ioctl(SIOCGLIFCONF, lifconf->lifc_len)", p->lifc_len);
+ PRE_FIELD_READ("ioctl(SIOCGLIFCONF, lifconf->lifc_buf)", p->lifc_buf);
+ PRE_FIELD_READ("ioctl(SIOCGLIFCONF, lifconf->lifc_family)",
+ p->lifc_family);
+ PRE_FIELD_READ("ioctl(SIOCGLIFCONF, lifconf->lifc_flags)",
+ p->lifc_flags);
+ if (ML_(safe_to_deref)(p, sizeof(*p))) {
+ if ((p->lifc_buf != NULL) && (p->lifc_len > 0))
+ PRE_MEM_WRITE("ioctl(SIOCGLIFCONF, lifconf->lifc_buf)",
+ (Addr) p->lifc_buf, p->lifc_len);
+ }
+ /* lifc_len gets also written to during SIOCGLIFCONF ioctl. */
+ }
+ break;
+ case VKI_SIOCGLIFFLAGS:
+ {
+ struct vki_lifreq *p = (struct vki_lifreq *) ARG3;
+ PRE_FIELD_READ("ioctl(SIOCGLIFFLAGS, lifreq->lifr_name)",
+ p->lifr_name);
+ PRE_FIELD_WRITE("ioctl(SIOCGLIFFLAGS, lifreq->lifr_flags)",
+ p->lifr_flags);
+ }
+ break;
+ case VKI_SIOCGLIFNETMASK:
+ {
+ struct vki_lifreq *p = (struct vki_lifreq *) ARG3;
+ PRE_FIELD_READ("ioctl(SIOCGLIFNETMASK, lifreq->lifr_name)",
+ p->lifr_name);
+ PRE_FIELD_WRITE("ioctl(SIOCGLIFNETMASK, lifreq->lifr_addr)",
+ p->lifr_addr);
+ }
+ break;
case VKI_SIOCGLIFNUM:
{
struct vki_lifnum *p = (struct vki_lifnum *) ARG3;
case VKI_SIOCGIFNUM:
POST_MEM_WRITE(ARG3, sizeof(int));
break;
+ case VKI_SIOCGLIFBRDADDR:
+ {
+ struct vki_lifreq *p = (struct vki_lifreq *) ARG3;
+ POST_FIELD_WRITE(p->lifr_addr);
+ }
+ break;
+ case VKI_SIOCGLIFCONF:
+ {
+ struct vki_lifconf *p = (struct vki_lifconf *) ARG3;
+ POST_FIELD_WRITE(p->lifc_len);
+ POST_FIELD_WRITE(p->lifc_req);
+ if ((p->lifc_req != NULL) && (p->lifc_len > 0))
+ POST_MEM_WRITE((Addr) p->lifc_req, p->lifc_len);
+ }
+ break;
+ case VKI_SIOCGLIFFLAGS:
+ {
+ struct vki_lifreq *p = (struct vki_lifreq *) ARG3;
+ POST_FIELD_WRITE(p->lifr_flags);
+ }
+ break;
+ case VKI_SIOCGLIFNETMASK:
+ {
+ struct vki_lifreq *p = (struct vki_lifreq *) ARG3;
+ POST_FIELD_WRITE(p->lifr_addr);
+ }
+ break;
case VKI_SIOCGLIFNUM:
{
struct vki_lifnum *p = (struct vki_lifnum *) ARG3;
#include <net/if.h>
#define vki_ifconf ifconf
#define vki_ifreq ifreq
+#define vki_lifconf lifconf
#define vki_lifnum lifnum
+#define vki_lifreq lifreq
#include <netinet/in.h>
#define VKI_SIOCGIFFLAGS SIOCGIFFLAGS
#define VKI_SIOCGIFNETMASK SIOCGIFNETMASK
#define VKI_SIOCGIFNUM SIOCGIFNUM
+#define VKI_SIOCGLIFBRDADDR SIOCGLIFBRDADDR
+#define VKI_SIOCGLIFCONF SIOCGLIFCONF
+#define VKI_SIOCGLIFFLAGS SIOCGLIFFLAGS
+#define VKI_SIOCGLIFNETMASK SIOCGLIFNETMASK
#define VKI_SIOCGLIFNUM SIOCGLIFNUM
__attribute__((noinline))
static int sys_ioctl_SIOCGIFCONF_3(void)
{
-#define BUF_SIZE sizeof(struct ifreq) * 1000
-
int fd = socket(AF_INET, SOCK_DGRAM, 0);
if (fd < 0)
perror("socket");
SY(SYS_ioctl, x0 - 1, x0 + SIOCGIFNUM, x0 - 1); FAIL;
}
+__attribute__((noinline))
+static void sys_ioctl_SIOCGLIFBRDADDR(void)
+{
+ GO(SYS_ioctl, "(SIOCGLIFBRDADDR) 3s 2m");
+ SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFBRDADDR, x0 - 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGLIFBRDADDR_2(void)
+{
+ struct lifreq lifr;
+
+ lifr.lifr_name[0] = x0 + 'l';
+ lifr.lifr_name[1] = x0 + 'o';
+ lifr.lifr_name[2] = x0 + '0';
+ lifr.lifr_name[3] = x0 + '\0';
+
+ GO(SYS_ioctl, "(SIOCGLIFBRDADDR), 4s 0m");
+ SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFBRDADDR, &lifr + x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGLIFCONF(void)
+{
+ GO(SYS_ioctl, "(SIOCGLIFCONF), 3s 4m");
+ SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFCONF, x0 - 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGLIFCONF_2(void)
+{
+ struct lifconf lifc;
+ char buf[5];
+
+ lifc.lifc_len = x0 + 5;
+ lifc.lifc_buf = (void *) (x0 + buf);
+ lifc.lifc_family = x0 + 1;
+ lifc.lifc_flags = x0 + 0;
+
+ GO(SYS_ioctl, "(SIOCGLIFCONF), 7s 0m");
+ SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFCONF, &lifc + x0); FAIL;
+}
+
+__attribute__((noinline))
+static int sys_ioctl_SIOCGLIFCONF_3(void)
+{
+ int fd = socket(AF_INET, SOCK_DGRAM, 0);
+ if (fd < 0)
+ perror("socket");
+
+ struct lifnum lifn;
+ lifn.lifn_family = AF_INET;
+ lifn.lifn_flags = 0;
+ if (ioctl(fd, SIOCGLIFNUM, &lifn) < 0)
+ perror("ioctl(SIOCGLIFNUM)");
+
+ struct lifconf lifc;
+ lifc.lifc_family = AF_INET;
+ lifc.lifc_flags = 0;
+ lifc.lifc_len = (lifn.lifn_count + 1) * sizeof(struct lifreq);
+ lifc.lifc_buf = malloc((lifn.lifn_count + 1) * sizeof(struct lifreq));
+ if (lifc.lifc_buf == NULL)
+ perror("malloc");
+
+ GO(SYS_ioctl, "(SIOCGLIFCONF), 1s 0m");
+ if (ioctl(fd, SIOCGLIFCONF, &lifc) < 0)
+ perror("ioctl(SIOCGLIFCONF)");
+
+ /* Check definedness of lifc attributes ... */
+ int x = 0;
+ if (lifc.lifc_len != 0) x = -1; else x = -2;
+ if (lifc.lifc_req != NULL) x = -3; else x = -4;
+ if (strcmp(lifc.lifc_req[0].lifr_name, "") != 0) x = -5; else x = -6;
+ /* ... and now one which is not defined. */
+ if (strcmp(lifc.lifc_req[lifn.lifn_count].lifr_name, "") != 0)
+ x = -7; else x = -8;
+
+ free(lifc.lifc_buf);
+ close(fd);
+ return x;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGLIFFLAGS(void)
+{
+ GO(SYS_ioctl, "(SIOCGLIFFLAGS) 3s 2m");
+ SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFFLAGS, x0 - 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGLIFFLAGS_2(void)
+{
+ struct lifreq lifr;
+
+ lifr.lifr_name[0] = x0 + 'l';
+ lifr.lifr_name[1] = x0 + 'o';
+ lifr.lifr_name[2] = x0 + '0';
+ lifr.lifr_name[3] = x0 + '\0';
+
+ GO(SYS_ioctl, "(SIOCGLIFFLAGS), 4s 0m");
+ SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFFLAGS, &lifr + x0); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGLIFNETMASK(void)
+{
+ GO(SYS_ioctl, "(SIOCGLIFNETMASK) 3s 2m");
+ SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFNETMASK, x0 - 1); FAIL;
+}
+
+__attribute__((noinline))
+static void sys_ioctl_SIOCGLIFNETMASK_2(void)
+{
+ struct lifreq lifr;
+
+ lifr.lifr_name[0] = x0 + 'l';
+ lifr.lifr_name[1] = x0 + 'o';
+ lifr.lifr_name[2] = x0 + '0';
+ lifr.lifr_name[3] = x0 + '\0';
+
+ GO(SYS_ioctl, "(SIOCGLIFNETMASK), 4s 0m");
+ SY(SYS_ioctl, x0 - 1, x0 + SIOCGLIFNETMASK, &lifr + x0); FAIL;
+}
+
__attribute__((noinline))
static void sys_ioctl_SIOCGLIFNUM(void)
{
sys_ioctl_SIOCGIFNETMASK_2();
sys_ioctl_SIOCGIFNUM();
sys_ioctl_SIOCGIFNUM_2();
+ sys_ioctl_SIOCGLIFBRDADDR();
+ sys_ioctl_SIOCGLIFBRDADDR_2();
+ sys_ioctl_SIOCGLIFCONF();
+ sys_ioctl_SIOCGLIFCONF_2();
+ sys_ioctl_SIOCGLIFCONF_3();
+ sys_ioctl_SIOCGLIFFLAGS();
+ sys_ioctl_SIOCGLIFFLAGS_2();
+ sys_ioctl_SIOCGLIFNETMASK();
+ sys_ioctl_SIOCGLIFNETMASK_2();
sys_ioctl_SIOCGLIFNUM();
/* filio */
...
Address 0x........ is not stack'd, malloc'd or (recently) free'd
+---------------------------------------------------------
+ 54: SYS_ioctl (SIOCGLIFBRDADDR) 3s 2m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(SIOCGLIFBRDADDR, lifreq->lifr_name) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(SIOCGLIFBRDADDR, lifreq->lifr_addr) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54: SYS_ioctl (SIOCGLIFBRDADDR), 4s 0m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(SIOCGLIFBRDADDR, lifreq->lifr_name) points to uninitialised byte(s)
+ ...
+ Address 0x........ is on thread 1's stack
+
+---------------------------------------------------------
+ 54: SYS_ioctl (SIOCGLIFCONF), 3s 4m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(SIOCGLIFCONF, lifconf->lifc_len) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(SIOCGLIFCONF, lifconf->lifc_buf) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(SIOCGLIFCONF, lifconf->lifc_family) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(SIOCGLIFCONF, lifconf->lifc_flags) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54: SYS_ioctl (SIOCGLIFCONF), 7s 0m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(SIOCGLIFCONF, lifconf->lifc_len) points to uninitialised byte(s)
+ ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param ioctl(SIOCGLIFCONF, lifconf->lifc_buf) points to uninitialised byte(s)
+ ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param ioctl(SIOCGLIFCONF, lifconf->lifc_family) points to uninitialised byte(s)
+ ...
+ Address 0x........ is on thread 1's stack
+
+Syscall param ioctl(SIOCGLIFCONF, lifconf->lifc_flags) points to uninitialised byte(s)
+ ...
+ Address 0x........ is on thread 1's stack
+
+---------------------------------------------------------
+ 54: SYS_ioctl (SIOCGLIFCONF), 1s 0m
+---------------------------------------------------------
+Conditional jump or move depends on uninitialised value(s)
+ ...
+
+---------------------------------------------------------
+ 54: SYS_ioctl (SIOCGLIFFLAGS) 3s 2m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(SIOCGLIFFLAGS, lifreq->lifr_name) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(SIOCGLIFFLAGS, lifreq->lifr_flags) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54: SYS_ioctl (SIOCGLIFFLAGS), 4s 0m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(SIOCGLIFFLAGS, lifreq->lifr_name) points to uninitialised byte(s)
+ ...
+ Address 0x........ is on thread 1's stack
+
+---------------------------------------------------------
+ 54: SYS_ioctl (SIOCGLIFNETMASK) 3s 2m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(SIOCGLIFNETMASK, lifreq->lifr_name) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+Syscall param ioctl(SIOCGLIFNETMASK, lifreq->lifr_addr) points to unaddressable byte(s)
+ ...
+ Address 0x........ is not stack'd, malloc'd or (recently) free'd
+
+---------------------------------------------------------
+ 54: SYS_ioctl (SIOCGLIFNETMASK), 4s 0m
+---------------------------------------------------------
+Syscall param ioctl(fd) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(request) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(arg) contains uninitialised byte(s)
+ ...
+
+Syscall param ioctl(SIOCGLIFNETMASK, lifreq->lifr_name) points to uninitialised byte(s)
+ ...
+ Address 0x........ is on thread 1's stack
+
---------------------------------------------------------
54: SYS_ioctl (SIOCGLIFNUM) 4s 0m
---------------------------------------------------------