Zbigniew Jędrzejewski-Szmek 708deb
From cef3566998fcae6936d781e678c309950a8a5787 Mon Sep 17 00:00:00 2001
Zbigniew Jędrzejewski-Szmek 708deb
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Zbigniew Jędrzejewski-Szmek 708deb
Date: Fri, 3 Oct 2014 20:57:30 -0400
Zbigniew Jędrzejewski-Szmek 708deb
Subject: [PATCH] sd-id128: do stricter checking of random boot id
Zbigniew Jędrzejewski-Szmek 708deb
Zbigniew Jędrzejewski-Szmek 708deb
If we are bothering to check whether the kernel is not feeding us
Zbigniew Jędrzejewski-Szmek 708deb
bad data, we might as well do it properly.
Zbigniew Jędrzejewski-Szmek 708deb
Zbigniew Jędrzejewski-Szmek 708deb
CID #1237692.
Zbigniew Jędrzejewski-Szmek 708deb
---
Zbigniew Jędrzejewski-Szmek 708deb
 src/libsystemd/sd-id128/sd-id128.c | 7 +++++--
Zbigniew Jędrzejewski-Szmek 708deb
 1 file changed, 5 insertions(+), 2 deletions(-)
Zbigniew Jędrzejewski-Szmek 708deb
Zbigniew Jędrzejewski-Szmek 708deb
diff --git a/src/libsystemd/sd-id128/sd-id128.c b/src/libsystemd/sd-id128/sd-id128.c
Zbigniew Jędrzejewski-Szmek 708deb
index a1e44e6d19..233ffa070b 100644
Zbigniew Jędrzejewski-Szmek 708deb
--- a/src/libsystemd/sd-id128/sd-id128.c
Zbigniew Jędrzejewski-Szmek 708deb
+++ b/src/libsystemd/sd-id128/sd-id128.c
Zbigniew Jędrzejewski-Szmek 708deb
@@ -183,11 +183,14 @@ _public_ int sd_id128_get_boot(sd_id128_t *ret) {
Zbigniew Jędrzejewski-Szmek 708deb
         for (j = 0, p = buf; j < 16; j++) {
Zbigniew Jędrzejewski-Szmek 708deb
                 int a, b;
Zbigniew Jędrzejewski-Szmek 708deb
 
Zbigniew Jędrzejewski-Szmek 708deb
-                if (p >= buf + k)
Zbigniew Jędrzejewski-Szmek 708deb
+                if (p >= buf + k - 1)
Zbigniew Jędrzejewski-Szmek 708deb
                         return -EIO;
Zbigniew Jędrzejewski-Szmek 708deb
 
Zbigniew Jędrzejewski-Szmek 708deb
-                if (*p == '-')
Zbigniew Jędrzejewski-Szmek 708deb
+                if (*p == '-') {
Zbigniew Jędrzejewski-Szmek 708deb
                         p++;
Zbigniew Jędrzejewski-Szmek 708deb
+                        if (p >= buf + k - 1)
Zbigniew Jędrzejewski-Szmek 708deb
+                                return -EIO;
Zbigniew Jędrzejewski-Szmek 708deb
+                }
Zbigniew Jędrzejewski-Szmek 708deb
 
Zbigniew Jędrzejewski-Szmek 708deb
                 a = unhexchar(p[0]);
Zbigniew Jędrzejewski-Szmek 708deb
                 b = unhexchar(p[1]);