svn commit: r367296 - head/sys/net

Konstantin Belousov kib at FreeBSD.org
Tue Nov 3 14:33:05 UTC 2020


Author: kib
Date: Tue Nov  3 14:33:04 2020
New Revision: 367296
URL: https://svnweb.freebsd.org/changeset/base/367296

Log:
  if_media.c SIOCGMEDIAX handler: improve loop
  
  Stop advancing counter past the current iteration number at the start
  of iteration.  This removes the need of subtracting one when
  calculating index for copyout, and arguably fixes off-by-one reporting
  of copied out elements when copyout failed.
  
  Reviewed by:	hselasky
  Sponsored by:	Mellanox Technologies / NVidia Networking
  MFC after:	1 week
  Differential revision:	https://reviews.freebsd.org/D27073

Modified:
  head/sys/net/if_media.c

Modified: head/sys/net/if_media.c
==============================================================================
--- head/sys/net/if_media.c	Tue Nov  3 13:26:00 2020	(r367295)
+++ head/sys/net/if_media.c	Tue Nov  3 14:33:04 2020	(r367296)
@@ -300,15 +300,17 @@ ifmedia_ioctl(struct ifnet *ifp, struct ifreq *ifr, st
 		 * allocate.
 		 */
 		i = 0;
-		LIST_FOREACH(ep, &ifm->ifm_list, ifm_list)
-			if (i++ < ifmr->ifm_count) {
+		LIST_FOREACH(ep, &ifm->ifm_list, ifm_list) {
+			if (i < ifmr->ifm_count) {
 				error = copyout(&ep->ifm_media,
-				    ifmr->ifm_ulist + i - 1, sizeof(int));
-				if (error)
+				    ifmr->ifm_ulist + i, sizeof(int));
+				if (error != 0)
 					break;
 			}
+			i++;
+		}
 		if (error == 0 && i > ifmr->ifm_count)
-			error = ifmr->ifm_count ? E2BIG : 0;
+			error = ifmr->ifm_count != 0 ? E2BIG : 0;
 		ifmr->ifm_count = i;
 		break;
 	}


More information about the svn-src-all mailing list