Module Name: src
Committed By: christos
Date: Thu Apr 17 16:14:22 UTC 2014
Modified Files:
src/sys/kern: uipc_domain.c
src/sys/sys: socket.h
Log Message:
CID/1203196: Don't confuse coverity with out of bounds access
To generate a diff of this commit:
cvs rdiff -u -r1.91 -r1.92 src/sys/kern/uipc_domain.c
cvs rdiff -u -r1.108 -r1.109 src/sys/sys/socket.h
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/kern/uipc_domain.c
diff -u src/sys/kern/uipc_domain.c:1.91 src/sys/kern/uipc_domain.c:1.92
--- src/sys/kern/uipc_domain.c:1.91 Wed Apr 2 11:35:45 2014
+++ src/sys/kern/uipc_domain.c Thu Apr 17 12:14:22 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: uipc_domain.c,v 1.91 2014/04/02 15:35:45 seanb Exp $ */
+/* $NetBSD: uipc_domain.c,v 1.92 2014/04/17 16:14:22 christos Exp $ */
/*
* Copyright (c) 1982, 1986, 1993
@@ -32,7 +32,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: uipc_domain.c,v 1.91 2014/04/02 15:35:45 seanb Exp $");
+__KERNEL_RCSID(0, "$NetBSD: uipc_domain.c,v 1.92 2014/04/17 16:14:22 christos Exp $");
#include <sys/param.h>
#include <sys/socket.h>
@@ -418,7 +418,7 @@ sysctl_dounpcb(struct kinfo_pcb *pcb, co
pcb->ki_rcvq = so->so_rcv.sb_cc;
pcb->ki_sndq = so->so_snd.sb_cc;
- un = (struct sockaddr_un *)&pcb->ki_src;
+ un = (struct sockaddr_un *)pcb->ki_spad;
/*
* local domain sockets may bind without having a local
* endpoint. bleah!
@@ -430,17 +430,17 @@ sysctl_dounpcb(struct kinfo_pcb *pcb, co
* makeun().
*/
memcpy(un, unp->unp_addr,
- min(sizeof(pcb->ki_s), unp->unp_addr->sun_len + 1));
+ min(sizeof(pcb->ki_spad), unp->unp_addr->sun_len + 1));
}
else {
un->sun_len = offsetof(struct sockaddr_un, sun_path);
un->sun_family = pcb->ki_family;
}
if (unp->unp_conn != NULL) {
- un = (struct sockaddr_un *)&pcb->ki_dst;
+ un = (struct sockaddr_un *)pcb->ki_dpad;
if (unp->unp_conn->unp_addr != NULL) {
memcpy(un, unp->unp_conn->unp_addr,
- min(sizeof(pcb->ki_s), unp->unp_conn->unp_addr->sun_len + 1));
+ min(sizeof(pcb->ki_dpad), unp->unp_conn->unp_addr->sun_len + 1));
}
else {
un->sun_len = offsetof(struct sockaddr_un, sun_path);
Index: src/sys/sys/socket.h
diff -u src/sys/sys/socket.h:1.108 src/sys/sys/socket.h:1.109
--- src/sys/sys/socket.h:1.108 Thu Jan 31 09:30:47 2013
+++ src/sys/sys/socket.h Thu Apr 17 12:14:22 2014
@@ -1,4 +1,4 @@
-/* $NetBSD: socket.h,v 1.108 2013/01/31 14:30:47 joerg Exp $ */
+/* $NetBSD: socket.h,v 1.109 2014/04/17 16:14:22 christos Exp $ */
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
@@ -428,6 +428,8 @@ struct kinfo_pcb {
#define ki_src ki_s._kis_src
#define ki_dst ki_d._kid_dst
+#define ki_spad ki_s._kis_pad
+#define ki_dpad ki_d._kid_pad
#define PCB_SLOP 20
#define PCB_ALL 0