On Wed, Jan 30, 2013 at 10:57 AM, walter harms <wharms@xxxxxx> wrote: > > > Am 30.01.2013 09:27, schrieb Dan Carpenter: >> On Wed, Jan 30, 2013 at 09:15:43AM +0100, walter harms wrote: >>> >>> >>> Am 30.01.2013 08:06, schrieb Dan Carpenter: >>>> There wasn't any error handling for this kzalloc(). >>>> >>>> Signed-off-by: Dan Carpenter <dan.carpenter@xxxxxxxxxx> >>>> >>>> diff --git a/drivers/scsi/osd/osd_initiator.c b/drivers/scsi/osd/osd_initiator.c >>>> index c06b8e5..d8293f2 100644 >>>> --- a/drivers/scsi/osd/osd_initiator.c >>>> +++ b/drivers/scsi/osd/osd_initiator.c >>>> @@ -144,6 +144,10 @@ static int _osd_get_print_system_info(struct osd_dev *od, >>>> odi->osdname_len = get_attrs[a].len; >>>> /* Avoid NULL for memcmp optimization 0-length is good enough */ >>>> odi->osdname = kzalloc(odi->osdname_len + 1, GFP_KERNEL); >>>> + if (!odi->osdname) { >>>> + ret = -ENOMEM; >>>> + goto out; >>>> + } >>>> if (odi->osdname_len) >>>> memcpy(odi->osdname, get_attrs[a].val_ptr, odi->osdname_len); >>>> OSD_INFO("OSD_NAME [%s]\n", odi->osdname); >>>> -- >>> >>> this looks like strdup() ? >>> >> >> Maybe? It's a funny thing going on with the NUL terminator and I >> don't understand what the comment is about. >> >> It appears that normally "get_attrs[a].val_ptr" is a NUL terminated >> string but "get_attrs[a].len" does not count the terminator. >> >> Odd. >> > i have no clue what the programmer was thinking. if i read this correct > osdname is u8 *osdname; so a simple strdup() or strndup() would be ok > the comment seems to indicate that get_attrs[a].val_ptr could be NULL > but where is the check ? > Perhaps they are not using ascii here ? then a memdup(get_attrs[a].len) > would be better. There are subtle differences between kstrdup or kmemdup and this implementation. kmemdup is problematic as get_attrs[a].val_ptr does not contain the NUL terminator In the following case: if get_attrs[a].len == 0 then get_attrs[a].val_ptr == NULL The end result should be odi->osdname_len = 0 odi->osdname = kzalloc(1, GFP_KERNEL); while with kstrdup, odi->osdname will end up being NULL as it's input arg "s" is NULL. Benny > > re, > wh > > -- To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html