diff options
author | Florin Malita <fmalita@gmail.com> | 2007-07-18 18:04:46 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-07-18 18:17:23 -0400 |
commit | 9ee0be05dc69b61e5a869bffebd638b31898dae2 (patch) | |
tree | 22a6df6aef8d03caac126a5dc88e9977a1354768 /drivers | |
parent | 5bae7ac9feba925fd0099057f6b23d7be80b7b41 (diff) |
ISDN HiSax: uninitialized return in hisax_cs_setup
Coverity (1792) spotted a possibly uninitialized return value in case of
kmalloc() failure:
1116 static int hisax_cs_setup(int cardnr, struct IsdnCard *card,
1117 struct IsdnCardState *cs)
1119 int ret;
1120
1121 if (!(cs->rcvbuf = kmalloc(MAX_DFRAME_LEN_L1, GFP_ATOMIC))) {
1122 printk(KERN_WARNING "HiSax: No memory for isac rcvbuf\n");
1123 ll_unload(cs);
1124 goto outf_cs;
...
1165 outf_cs:
1166 kfree(cs);
1167 card->cs = NULL;
1168 return ret;
The straightforward solution would be to just add the missing
initialization but hardcoding the return value in the out_cs branch
(only taken on failure) seems to work just as well and it allows killing
a couple of other lines too.
Signed-off-by: Florin Malita <fmalita@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/isdn/hisax/config.c | 4 |
1 files changed, 1 insertions, 3 deletions
diff --git a/drivers/isdn/hisax/config.c b/drivers/isdn/hisax/config.c index 5f7907e57090..97097ef3491e 100644 --- a/drivers/isdn/hisax/config.c +++ b/drivers/isdn/hisax/config.c | |||
@@ -1146,14 +1146,12 @@ static int hisax_cs_setup(int cardnr, struct IsdnCard *card, | |||
1146 | } | 1146 | } |
1147 | if (ret) { | 1147 | if (ret) { |
1148 | closecard(cardnr); | 1148 | closecard(cardnr); |
1149 | ret = 0; | ||
1150 | goto outf_cs; | 1149 | goto outf_cs; |
1151 | } | 1150 | } |
1152 | init_tei(cs, cs->protocol); | 1151 | init_tei(cs, cs->protocol); |
1153 | ret = CallcNewChan(cs); | 1152 | ret = CallcNewChan(cs); |
1154 | if (ret) { | 1153 | if (ret) { |
1155 | closecard(cardnr); | 1154 | closecard(cardnr); |
1156 | ret = 0; | ||
1157 | goto outf_cs; | 1155 | goto outf_cs; |
1158 | } | 1156 | } |
1159 | /* ISAR needs firmware download first */ | 1157 | /* ISAR needs firmware download first */ |
@@ -1165,7 +1163,7 @@ static int hisax_cs_setup(int cardnr, struct IsdnCard *card, | |||
1165 | outf_cs: | 1163 | outf_cs: |
1166 | kfree(cs); | 1164 | kfree(cs); |
1167 | card->cs = NULL; | 1165 | card->cs = NULL; |
1168 | return ret; | 1166 | return 0; |
1169 | } | 1167 | } |
1170 | 1168 | ||
1171 | static int checkcard(int cardnr, char *id, int *busy_flag, struct module *lockowner) | 1169 | static int checkcard(int cardnr, char *id, int *busy_flag, struct module *lockowner) |