Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 20 Apr 2016 01:10:07 +0000 (UTC)
From:      "Conrad E. Meyer" <cem@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r298321 - head/sys/x86/acpica
Message-ID:  <201604200110.u3K1A7je022147@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: cem
Date: Wed Apr 20 01:10:07 2016
New Revision: 298321
URL: https://svnweb.freebsd.org/changeset/base/298321

Log:
  SRAT: Don't overflow domain_pxm table
  
  If we reached MAXMEMDOM, we would previously try to insert an additional
  element and only detect overflow after causing (probably trivial) memory
  overflow.  Instead, detect the ndomain > MAXMEMDOM case before we write past
  the end.
  
  Reported by:	Coverity
  CID:		1354783
  Sponsored by:	EMC / Isilon Storage Division

Modified:
  head/sys/x86/acpica/srat.c

Modified: head/sys/x86/acpica/srat.c
==============================================================================
--- head/sys/x86/acpica/srat.c	Wed Apr 20 01:05:54 2016	(r298320)
+++ head/sys/x86/acpica/srat.c	Wed Apr 20 01:10:07 2016	(r298321)
@@ -355,17 +355,18 @@ renumber_domains(void)
 		if (j < ndomain && domain_pxm[j] == mem_info[i].domain)
 			continue;
 
+		if (ndomain >= MAXMEMDOM) {
+			ndomain = 1;
+			printf("SRAT: Too many memory domains\n");
+			return (EFBIG);
+		}
+
 		/* Insert the new domain at slot 'j'. */
 		slot = j;
 		for (j = ndomain; j > slot; j--)
 			domain_pxm[j] = domain_pxm[j - 1];
 		domain_pxm[slot] = mem_info[i].domain;
 		ndomain++;
-		if (ndomain > MAXMEMDOM) {
-			ndomain = 1;
-			printf("SRAT: Too many memory domains\n");
-			return (EFBIG);
-		}
 	}
 
 	/* Renumber each domain to its index in the sorted 'domain_pxm' list. */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201604200110.u3K1A7je022147>