Author: melifaro
Date: Tue Jan  7 15:59:33 2014
New Revision: 260394
URL: http://svnweb.freebsd.org/changeset/base/260394

Log:
  Teach every SIOCGIFSTATUS provider to fill in ifs->ascii anyway.
  Remove old bits of data concat for 'ascii' field.
  Remove special SIOCGIFSTATUS handling from if.c (which Coverity yells at).
  
  Reported by:  Coverity
  Coverity CID: 1147174
  MFC after:    2 weeks

Modified:
  head/sys/dev/firewire/if_fwe.c
  head/sys/net/if.c
  head/sys/net/if_tap.c
  head/sys/net/if_tun.c

Modified: head/sys/dev/firewire/if_fwe.c
==============================================================================
--- head/sys/dev/firewire/if_fwe.c      Tue Jan  7 14:03:42 2014        
(r260393)
+++ head/sys/dev/firewire/if_fwe.c      Tue Jan  7 15:59:33 2014        
(r260394)
@@ -403,7 +403,7 @@ fwe_ioctl(struct ifnet *ifp, u_long cmd,
 {
        struct fwe_softc *fwe = ((struct fwe_eth_softc *)ifp->if_softc)->fwe;
        struct ifstat *ifs = NULL;
-       int s, error, len;
+       int s, error;
 
        switch (cmd) {
                case SIOCSIFFLAGS:
@@ -434,12 +434,8 @@ fwe_ioctl(struct ifnet *ifp, u_long cmd,
                case SIOCGIFSTATUS:
                        s = splimp();
                        ifs = (struct ifstat *)data;
-                       len = strlen(ifs->ascii);
-                       if (len < sizeof(ifs->ascii))
-                               snprintf(ifs->ascii + len,
-                                       sizeof(ifs->ascii) - len,
-                                       "\tch %d dma %d\n",
-                                               fwe->stream_ch, fwe->dma_ch);
+                       snprintf(ifs->ascii, sizeof(ifs->ascii),
+                           "\tch %d dma %d\n", fwe->stream_ch, fwe->dma_ch);
                        splx(s);
                        break;
                case SIOCSIFCAP:

Modified: head/sys/net/if.c
==============================================================================
--- head/sys/net/if.c   Tue Jan  7 14:03:42 2014        (r260393)
+++ head/sys/net/if.c   Tue Jan  7 15:59:33 2014        (r260394)
@@ -2088,7 +2088,6 @@ static int
 ifhwioctl(u_long cmd, struct ifnet *ifp, caddr_t data, struct thread *td)
 {
        struct ifreq *ifr;
-       struct ifstat *ifs;
        int error = 0;
        int new_flags, temp_flags;
        size_t namelen, onamelen;
@@ -2425,9 +2424,6 @@ ifhwioctl(u_long cmd, struct ifnet *ifp,
                break;
 
        case SIOCGIFSTATUS:
-               ifs = (struct ifstat *)data;
-               ifs->ascii[0] = '\0';
-
        case SIOCGIFPSRCADDR:
        case SIOCGIFPDSTADDR:
        case SIOCGIFMEDIA:

Modified: head/sys/net/if_tap.c
==============================================================================
--- head/sys/net/if_tap.c       Tue Jan  7 14:03:42 2014        (r260393)
+++ head/sys/net/if_tap.c       Tue Jan  7 15:59:33 2014        (r260394)
@@ -636,12 +636,12 @@ tapifioctl(struct ifnet *ifp, u_long cmd
 
                case SIOCGIFSTATUS:
                        ifs = (struct ifstat *)data;
-                       dummy = strlen(ifs->ascii);
                        mtx_lock(&tp->tap_mtx);
-                       if (tp->tap_pid != 0 && dummy < sizeof(ifs->ascii))
-                               snprintf(ifs->ascii + dummy,
-                                       sizeof(ifs->ascii) - dummy,
+                       if (tp->tap_pid != 0)
+                               snprintf(ifs->ascii, sizeof(ifs->ascii),
                                        "\tOpened by PID %d\n", tp->tap_pid);
+                       else
+                               ifs->ascii[0] = '\0';
                        mtx_unlock(&tp->tap_mtx);
                        break;
 

Modified: head/sys/net/if_tun.c
==============================================================================
--- head/sys/net/if_tun.c       Tue Jan  7 14:03:42 2014        (r260393)
+++ head/sys/net/if_tun.c       Tue Jan  7 15:59:33 2014        (r260394)
@@ -546,8 +546,10 @@ tunifioctl(struct ifnet *ifp, u_long cmd
                ifs = (struct ifstat *)data;
                mtx_lock(&tp->tun_mtx);
                if (tp->tun_pid)
-                       sprintf(ifs->ascii + strlen(ifs->ascii),
+                       snprintf(ifs->ascii, sizeof(ifs->ascii),
                            "\tOpened by PID %d\n", tp->tun_pid);
+               else
+                       ifs->ascii[0] = '\0';
                mtx_unlock(&tp->tun_mtx);
                break;
        case SIOCSIFADDR:
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to