[PATCH 2/3] nouveau: sanitise NOUVEAU_LIBDRM_*_LIMIT_PERCENT input

Emil Velikov emil.l.velikov at gmail.com
Wed Mar 12 13:45:44 PDT 2014


Current handling relies on atoi which does not detect errors
additionally, any integer value will be considered as a valid
percent.

Resolve that by using strtol and limiting the value within
the 5-100 (percent) range.

Signed-off-by: Emil Velikov <emil.l.velikov at gmail.com>
---
 nouveau/nouveau.c | 24 +++++++++++++++---------
 1 file changed, 15 insertions(+), 9 deletions(-)

diff --git a/nouveau/nouveau.c b/nouveau/nouveau.c
index d6013db..06cd804 100644
--- a/nouveau/nouveau.c
+++ b/nouveau/nouveau.c
@@ -76,7 +76,7 @@ nouveau_device_wrap(int fd, int close, struct nouveau_device **pdev)
 	struct nouveau_device *dev = &nvdev->base;
 	uint64_t chipset, vram, gart, bousage;
 	drmVersionPtr ver;
-	int ret;
+	int ret, limit;
 	char *tmp;
 
 #ifdef DEBUG
@@ -121,16 +121,22 @@ nouveau_device_wrap(int fd, int close, struct nouveau_device **pdev)
 
 	nvdev->close = close;
 
+	nvdev->vram_limit_percent = 80;
 	tmp = getenv("NOUVEAU_LIBDRM_VRAM_LIMIT_PERCENT");
-	if (tmp)
-		nvdev->vram_limit_percent = atoi(tmp);
-	else
-		nvdev->vram_limit_percent = 80;
+	if (tmp) {
+		limit = strtol(tmp, NULL, 10);
+		if (limit >= 5 && limit <= 100)
+			nvdev->vram_limit_percent = limit;
+	}
+
+	nvdev->gart_limit_percent = 80;
 	tmp = getenv("NOUVEAU_LIBDRM_GART_LIMIT_PERCENT");
-	if (tmp)
-		nvdev->gart_limit_percent = atoi(tmp);
-	else
-		nvdev->gart_limit_percent = 80;
+	if (tmp) {
+		limit = strtol(tmp, NULL, 10);
+		if (limit >= 5 && limit <= 100)
+			nvdev->gart_limit_percent = limit;
+	}
+
 	DRMINITLISTHEAD(&nvdev->bo_list);
 	nvdev->base.object.oclass = NOUVEAU_DEVICE_CLASS;
 	nvdev->base.lib_version = 0x01000000;
-- 
1.9.0



More information about the dri-devel mailing list