diff mbox

umad.c: memset() ib_user_mad_reg_req structure to 0 before invoking ioctl()

Message ID 20110704115314.7c15c6ac@b012350-ux (mailing list archive)
State New, archived
Headers show

Commit Message

sebastien dugue July 4, 2011, 9:53 a.m. UTC
This fixes the following warning issued by valgrind:

==5287== Syscall param ioctl(generic) points to uninitialised byte(s)
==5287==    at 0x3C466D95D7: ioctl (in /lib64/libc-2.12.so)
==5287==    by 0x526C292: umad_register (umad.c:947)
==5287==    by 0x568D206: smp_engine_init (query_smp.c:228)
==5287==    by 0x5689F8F: ibnd_discover_fabric (ibnetdisc.c:537)
==5287==    by 0x411700: devmgr_discover_fabric (devmgr_discover.c:66)

Signed-off-by: Jean-Vincent Ficet <jean-vincent.ficet@bull.net>

---

Comments

Hal Rosenstock July 5, 2011, 11:41 a.m. UTC | #1
On 7/4/2011 5:53 AM, sebastien dugue wrote:
> 
> This fixes the following warning issued by valgrind:
> 
> ==5287== Syscall param ioctl(generic) points to uninitialised byte(s)
> ==5287==    at 0x3C466D95D7: ioctl (in /lib64/libc-2.12.so)
> ==5287==    by 0x526C292: umad_register (umad.c:947)
> ==5287==    by 0x568D206: smp_engine_init (query_smp.c:228)
> ==5287==    by 0x5689F8F: ibnd_discover_fabric (ibnetdisc.c:537)
> ==5287==    by 0x411700: devmgr_discover_fabric (devmgr_discover.c:66)
> 
> Signed-off-by: Jean-Vincent Ficet <jean-vincent.ficet@bull.net>
> 
> ---
> 
> diff --git a/src/umad.c b/src/umad.c
> index 45a9423..cac46a4 100644
> --- a/src/umad.c
> +++ b/src/umad.c
> @@ -892,6 +892,7 @@ int umad_register_oui(int fd, int mgmt_class, uint8_t rmpp_version,
>  		return -EINVAL;
>  	}
>  
> +	memset(&req, 0, sizeof(req));
>  	req.qpn = 1;
>  	req.mgmt_class = mgmt_class;
>  	req.mgmt_class_version = 1;
> @@ -928,6 +929,7 @@ int umad_register(int fd, int mgmt_class, int mgmt_version,
>  	    ("fd %d mgmt_class %u mgmt_version %u rmpp_version %d method_mask %p",
>  	     fd, mgmt_class, mgmt_version, rmpp_version, method_mask);
>  
> +	memset(&req, 0, sizeof(req));
>  	req.qpn = qp = (mgmt_class == 0x1 || mgmt_class == 0x81) ? 0 : 1;
>  	req.mgmt_class = mgmt_class;
>  	req.mgmt_class_version = mgmt_version;

I think this is a "false positive" in valgrind. memset of the request
isn't really needed for either of these APIs as all input fields are
filled in by the caller and the only one which isn't is id which is an
output field.

-- Hal
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
sebastien dugue July 5, 2011, 3:11 p.m. UTC | #2
On Tue, 05 Jul 2011 07:41:17 -0400
Hal Rosenstock <hal@dev.mellanox.co.il> wrote:

> On 7/4/2011 5:53 AM, sebastien dugue wrote:
> > 
> > This fixes the following warning issued by valgrind:
> > 
> > ==5287== Syscall param ioctl(generic) points to uninitialised byte(s)
> > ==5287==    at 0x3C466D95D7: ioctl (in /lib64/libc-2.12.so)
> > ==5287==    by 0x526C292: umad_register (umad.c:947)
> > ==5287==    by 0x568D206: smp_engine_init (query_smp.c:228)
> > ==5287==    by 0x5689F8F: ibnd_discover_fabric (ibnetdisc.c:537)
> > ==5287==    by 0x411700: devmgr_discover_fabric (devmgr_discover.c:66)
> > 
> > Signed-off-by: Jean-Vincent Ficet <jean-vincent.ficet@bull.net>
> > 
> > ---
> > 
> > diff --git a/src/umad.c b/src/umad.c
> > index 45a9423..cac46a4 100644
> > --- a/src/umad.c
> > +++ b/src/umad.c
> > @@ -892,6 +892,7 @@ int umad_register_oui(int fd, int mgmt_class, uint8_t rmpp_version,
> >  		return -EINVAL;
> >  	}
> >  
> > +	memset(&req, 0, sizeof(req));
> >  	req.qpn = 1;
> >  	req.mgmt_class = mgmt_class;
> >  	req.mgmt_class_version = 1;
> > @@ -928,6 +929,7 @@ int umad_register(int fd, int mgmt_class, int mgmt_version,
> >  	    ("fd %d mgmt_class %u mgmt_version %u rmpp_version %d method_mask %p",
> >  	     fd, mgmt_class, mgmt_version, rmpp_version, method_mask);
> >  
> > +	memset(&req, 0, sizeof(req));
> >  	req.qpn = qp = (mgmt_class == 0x1 || mgmt_class == 0x81) ? 0 : 1;
> >  	req.mgmt_class = mgmt_class;
> >  	req.mgmt_class_version = mgmt_version;
> 
> I think this is a "false positive" in valgrind. memset of the request
> isn't really needed for either of these APIs as all input fields are
> filled in by the caller and the only one which isn't is id which is an
> output field.

  Ok then, it's no needed.

  Thanks,

  Sébastien.

> 
> -- Hal
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
sebastien dugue July 6, 2011, 7:08 a.m. UTC | #3
On Tue, 5 Jul 2011 20:17:18 +0200
Bart Van Assche <bvanassche@acm.org> wrote:

> On Mon, Jul 4, 2011 at 11:53 AM, sebastien dugue
> <sebastien.dugue@bull.net> wrote:
> >
> > This fixes the following warning issued by valgrind:
> >
> > ==5287== Syscall param ioctl(generic) points to uninitialised byte(s)
> > ==5287==    at 0x3C466D95D7: ioctl (in /lib64/libc-2.12.so)
> > ==5287==    by 0x526C292: umad_register (umad.c:947)
> > ==5287==    by 0x568D206: smp_engine_init (query_smp.c:228)
> > ==5287==    by 0x5689F8F: ibnd_discover_fabric (ibnetdisc.c:537)
> > ==5287==    by 0x411700: devmgr_discover_fabric (devmgr_discover.c:66)
> >
> > Signed-off-by: Jean-Vincent Ficet <jean-vincent.ficet@bull.net>
> >
> > ---
> >
> > diff --git a/src/umad.c b/src/umad.c
> > index 45a9423..cac46a4 100644
> > --- a/src/umad.c
> > +++ b/src/umad.c
> > @@ -892,6 +892,7 @@ int umad_register_oui(int fd, int mgmt_class, uint8_t rmpp_version,
> >                return -EINVAL;
> >        }
> >
> > +       memset(&req, 0, sizeof(req));
> >        req.qpn = 1;
> >        req.mgmt_class = mgmt_class;
> >        req.mgmt_class_version = 1;
> > @@ -928,6 +929,7 @@ int umad_register(int fd, int mgmt_class, int mgmt_version,
> >            ("fd %d mgmt_class %u mgmt_version %u rmpp_version %d method_mask %p",
> >             fd, mgmt_class, mgmt_version, rmpp_version, method_mask);
> >
> > +       memset(&req, 0, sizeof(req));
> >        req.qpn = qp = (mgmt_class == 0x1 || mgmt_class == 0x81) ? 0 : 1;
> >        req.mgmt_class = mgmt_class;
> >        req.mgmt_class_version = mgmt_version;
> 
> A possible alternative approach is to develop a patch for Valgrind
> that makes Valgrind ignore padding fields and/or output fields in the
> pre-ioctl check. See also PRE(sys_ioctl) in source file
> coregrind/m_syswrap/syswrap-linux.c or the documentation file
> README_MISSING_SYSCALL_OR_IOCTL.

  Could be, but this is largely out of scope for me and I can live
with the warning knowing it's a false positive.

  Thanks,

  Sébastien.

> 
> Bart.
> --
> To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/src/umad.c b/src/umad.c
index 45a9423..cac46a4 100644
--- a/src/umad.c
+++ b/src/umad.c
@@ -892,6 +892,7 @@  int umad_register_oui(int fd, int mgmt_class, uint8_t rmpp_version,
 		return -EINVAL;
 	}
 
+	memset(&req, 0, sizeof(req));
 	req.qpn = 1;
 	req.mgmt_class = mgmt_class;
 	req.mgmt_class_version = 1;
@@ -928,6 +929,7 @@  int umad_register(int fd, int mgmt_class, int mgmt_version,
 	    ("fd %d mgmt_class %u mgmt_version %u rmpp_version %d method_mask %p",
 	     fd, mgmt_class, mgmt_version, rmpp_version, method_mask);
 
+	memset(&req, 0, sizeof(req));
 	req.qpn = qp = (mgmt_class == 0x1 || mgmt_class == 0x81) ? 0 : 1;
 	req.mgmt_class = mgmt_class;
 	req.mgmt_class_version = mgmt_version;