On Wed, Jan 30, 2013 at 3:00 PM, walter harms <wharms@xxxxxx> wrote: > > > Am 30.01.2013 10:51, schrieb Benny Halevy: >> 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 > > ok, i understand - but can we assume that we are talking ascii here ? > No, it can be anything. UTF-8 is more likely but not guaranteed either. >> 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. >> > > and you want the argument to be "" ? > May i ask why ? kfree() can handle NULL and kprintf() (-family) also. It was Boaz' decision at the time to simplify internal tests like _the_same_or_null in drivers/scsi/osd/osd_uld.c that doesn't check for NULL Nothing spectacular :) Benny > > re, > wh > > >> 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