isdn/gigaset: make sure controller name is null terminated
authorTilman Schmidt <tilman@imap.cc>
Sat, 11 Oct 2014 11:46:29 +0000 (13:46 +0200)
committerDavid S. Miller <davem@davemloft.net>
Tue, 14 Oct 2014 19:05:33 +0000 (15:05 -0400)
In gigaset_isdn_regdev, the name field may not have a null terminator
if the source string's length is equal to the buffer size.
Fix by zero filling the structure and excluding the last byte of the
name field from the copy.

Spotted with Coverity.

Signed-off-by: Tilman Schmidt <tilman@imap.cc>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/isdn/gigaset/capi.c

index a2eabe97deeaad1e4016a2c4336f85cb53433c7b..044392cba262a7b0b871764d3ec7eff8bad7b3e5 100644 (file)
@@ -2358,7 +2358,7 @@ int gigaset_isdn_regdev(struct cardstate *cs, const char *isdnid)
        struct gigaset_capi_ctr *iif;
        int rc;
 
-       iif = kmalloc(sizeof(*iif), GFP_KERNEL);
+       iif = kzalloc(sizeof(*iif), GFP_KERNEL);
        if (!iif) {
                pr_err("%s: out of memory\n", __func__);
                return -ENOMEM;
@@ -2367,7 +2367,7 @@ int gigaset_isdn_regdev(struct cardstate *cs, const char *isdnid)
        /* prepare controller structure */
        iif->ctr.owner         = THIS_MODULE;
        iif->ctr.driverdata    = cs;
-       strncpy(iif->ctr.name, isdnid, sizeof(iif->ctr.name));
+       strncpy(iif->ctr.name, isdnid, sizeof(iif->ctr.name) - 1);
        iif->ctr.driver_name   = "gigaset";
        iif->ctr.load_firmware = NULL;
        iif->ctr.reset_ctr     = NULL;