Commit 668f272e authored by Ian Abbott's avatar Ian Abbott Committed by Greg Kroah-Hartman

Staging: comedi: serial2002: Reduce stack usage on 'open'

Reduce stack usage in serial_2002_open() by allocating dig_in_config,
dig_out_config, chan_in_config, and chan_out_config temporary arrays
using kcalloc() and freeing them when done with.
Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent fa3b5d9a
...@@ -412,30 +412,25 @@ static int serial_2002_open(struct comedi_device *dev) ...@@ -412,30 +412,25 @@ static int serial_2002_open(struct comedi_device *dev)
int max; int max;
}; };
struct config_t dig_in_config[32]; struct config_t *dig_in_config;
struct config_t dig_out_config[32]; struct config_t *dig_out_config;
struct config_t chan_in_config[32]; struct config_t *chan_in_config;
struct config_t chan_out_config[32]; struct config_t *chan_out_config;
int i; int i;
result = 0; result = 0;
for (i = 0; i < 32; i++) { dig_in_config = kcalloc(32, sizeof(struct config_t),
dig_in_config[i].kind = 0; GFP_KERNEL);
dig_in_config[i].bits = 0; dig_out_config = kcalloc(32, sizeof(struct config_t),
dig_in_config[i].min = 0; GFP_KERNEL);
dig_in_config[i].max = 0; chan_in_config = kcalloc(32, sizeof(struct config_t),
dig_out_config[i].kind = 0; GFP_KERNEL);
dig_out_config[i].bits = 0; chan_out_config = kcalloc(32, sizeof(struct config_t),
dig_out_config[i].min = 0; GFP_KERNEL);
dig_out_config[i].max = 0; if (!dig_in_config || !dig_out_config
chan_in_config[i].kind = 0; || !chan_in_config || !chan_out_config) {
chan_in_config[i].bits = 0; result = -ENOMEM;
chan_in_config[i].min = 0; goto err_alloc_configs;
chan_in_config[i].max = 0;
chan_out_config[i].kind = 0;
chan_out_config[i].bits = 0;
chan_out_config[i].min = 0;
chan_out_config[i].max = 0;
} }
tty_setspeed(devpriv->tty, devpriv->speed); tty_setspeed(devpriv->tty, devpriv->speed);
...@@ -690,6 +685,13 @@ static int serial_2002_open(struct comedi_device *dev) ...@@ -690,6 +685,13 @@ static int serial_2002_open(struct comedi_device *dev)
s->range_table_list = NULL; s->range_table_list = NULL;
} }
} }
err_alloc_configs:
kfree(dig_in_config);
kfree(dig_out_config);
kfree(chan_in_config);
kfree(chan_out_config);
if (result) { if (result) {
if (devpriv->tty) { if (devpriv->tty) {
filp_close(devpriv->tty, 0); filp_close(devpriv->tty, 0);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment