isdnloop: Validate NUL-terminated strings from user.
authorYOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Wed, 2 Apr 2014 03:48:42 +0000 (12:48 +0900)
committerWilly Tarreau <w@1wt.eu>
Mon, 19 May 2014 05:54:19 +0000 (07:54 +0200)
[ Upstream commit 77bc6bed7121936bb2e019a8c336075f4c8eef62 ]

Return -EINVAL unless all of user-given strings are correctly
NUL-terminated.

Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Willy Tarreau <w@1wt.eu>
drivers/isdn/isdnloop/isdnloop.c

index bf4168bb0ca024806cf9ac03dcf88179e54e79c5..4267d48fe0b3ef7c7b380d08295ff4722360bf17 100644 (file)
@@ -1071,6 +1071,12 @@ isdnloop_start(isdnloop_card * card, isdnloop_sdef * sdefp)
                return -EBUSY;
        if (copy_from_user((char *) &sdef, (char *) sdefp, sizeof(sdef)))
                return -EFAULT;
+
+       for (i = 0; i < 3; i++) {
+               if (!memchr(sdef.num[i], 0, sizeof(sdef.num[i])))
+                       return -EINVAL;
+       }
+
        spin_lock_irqsave(&card->isdnloop_lock, flags);
        switch (sdef.ptype) {
                case ISDN_PTYPE_EURO: