On Mon, Sep 23, 2013 at 06:47:16PM -0400, Lidza Louina wrote:
> This patch removes these warnings:
> potential null dereference 'brd->SerialDriver'. (alloc_tty_driver returns
> null)
> potential null dereference 'brd->PrintDriver'. (alloc_tty_driver returns null)
>
> This warning popped up because there wasn't a check
> to make sure that the serial and print drivers were
> allocated and not null before being initialized. This
> patch adds that check.
>
> Signed-off-by: Lidza Louina <[email protected]>
> ---
> drivers/staging/dgap/dgap_tty.c | 103
> +++++++++++++++++++++-------------------
> 1 file changed, 54 insertions(+), 49 deletions(-)
>
> diff --git a/drivers/staging/dgap/dgap_tty.c b/drivers/staging/dgap/dgap_tty.c
> index 924e2bf..8f0a824 100644
> --- a/drivers/staging/dgap/dgap_tty.c
> +++ b/drivers/staging/dgap/dgap_tty.c
> @@ -220,66 +220,71 @@ int dgap_tty_register(struct board_t *brd)
> DPR_INIT(("tty_register start"));
>
> brd->SerialDriver = alloc_tty_driver(MAXPORTS);
> + if(brd->SerialDriver){
Don't do it that way, flip it around.
brd->SerialDriver = alloc_tty_driver(MAXPORTS);
if (!brd->SerialDriver)
return -ENOMEM;
snprintf(brd->SerialName, MAXTTYNAMELEN, "tty_dgap_%d_", brd->boardnum);
brd->SerialDriver->name = brd->SerialName;
That way has fewer indents.
When you're writing code, you want it to read in a straight line going
down. You don't want long if statement blocks or spaghetti code. If
you hit an error deal with it immediately and continue with the story in
a straight line going down.
> +
> + /* The kernel wants space to store pointers to tty_structs */
> + brd->SerialDriver->ttys = dgap_driver_kzmalloc(MAXPORTS *
> sizeof(struct tty_struct *), GFP_KERNEL);
> + if (!brd->SerialDriver->ttys)
> + return(-ENOMEM);
On this if statement it's a little bit more complicated because you have
to free the memory you allocated earlier before returning. This one
should look like:
brd->SerialDriver->ttys = dgap_driver_kzmalloc(MAXPORTS * sizeof(struct
tty_struct *), GFP_KERNEL);
if (!brd->SerialDriver->ttys) {
ret = -ENOMEM;
goto err_put_driver;
}
tty_set_operations(brd->SerialDriver, &dgap_tty_ops);
At the end of the function there will be something like:
return 0;
err_release_foo:
release_foo();
err_free_something:
free_some_more_stuff();
err_put_driver:
put_tty_driver(brd->SerialDriver);
return ret;
}
regards,
dan carpenter
_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel