diff options
Diffstat (limited to 'net/ax25')
-rw-r--r-- | net/ax25/af_ax25.c | 6 | ||||
-rw-r--r-- | net/ax25/ax25_out.c | 4 | ||||
-rw-r--r-- | net/ax25/ax25_route.c | 5 | ||||
-rw-r--r-- | net/ax25/sysctl_net_ax25.c | 5 |
4 files changed, 11 insertions, 9 deletions
diff --git a/net/ax25/af_ax25.c b/net/ax25/af_ax25.c index 000695c48583..6cabf6d8a751 100644 --- a/net/ax25/af_ax25.c +++ b/net/ax25/af_ax25.c | |||
@@ -906,13 +906,13 @@ struct sock *ax25_make_new(struct sock *osk, struct ax25_dev *ax25_dev) | |||
906 | ax25->source_addr = oax25->source_addr; | 906 | ax25->source_addr = oax25->source_addr; |
907 | 907 | ||
908 | if (oax25->digipeat != NULL) { | 908 | if (oax25->digipeat != NULL) { |
909 | if ((ax25->digipeat = kmalloc(sizeof(ax25_digi), GFP_ATOMIC)) == NULL) { | 909 | ax25->digipeat = kmemdup(oax25->digipeat, sizeof(ax25_digi), |
910 | GFP_ATOMIC); | ||
911 | if (ax25->digipeat == NULL) { | ||
910 | sk_free(sk); | 912 | sk_free(sk); |
911 | ax25_cb_put(ax25); | 913 | ax25_cb_put(ax25); |
912 | return NULL; | 914 | return NULL; |
913 | } | 915 | } |
914 | |||
915 | memcpy(ax25->digipeat, oax25->digipeat, sizeof(ax25_digi)); | ||
916 | } | 916 | } |
917 | 917 | ||
918 | sk->sk_protinfo = ax25; | 918 | sk->sk_protinfo = ax25; |
diff --git a/net/ax25/ax25_out.c b/net/ax25/ax25_out.c index d7736e585336..f84047d1e8ce 100644 --- a/net/ax25/ax25_out.c +++ b/net/ax25/ax25_out.c | |||
@@ -70,11 +70,11 @@ ax25_cb *ax25_send_frame(struct sk_buff *skb, int paclen, ax25_address *src, ax2 | |||
70 | ax25->dest_addr = *dest; | 70 | ax25->dest_addr = *dest; |
71 | 71 | ||
72 | if (digi != NULL) { | 72 | if (digi != NULL) { |
73 | if ((ax25->digipeat = kmalloc(sizeof(ax25_digi), GFP_ATOMIC)) == NULL) { | 73 | ax25->digipeat = kmemdup(digi, sizeof(*digi), GFP_ATOMIC); |
74 | if (ax25->digipeat == NULL) { | ||
74 | ax25_cb_put(ax25); | 75 | ax25_cb_put(ax25); |
75 | return NULL; | 76 | return NULL; |
76 | } | 77 | } |
77 | memcpy(ax25->digipeat, digi, sizeof(ax25_digi)); | ||
78 | } | 78 | } |
79 | 79 | ||
80 | switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) { | 80 | switch (ax25->ax25_dev->values[AX25_VALUES_PROTOCOL]) { |
diff --git a/net/ax25/ax25_route.c b/net/ax25/ax25_route.c index 51b7bdaf27eb..8580356ace5c 100644 --- a/net/ax25/ax25_route.c +++ b/net/ax25/ax25_route.c | |||
@@ -432,11 +432,12 @@ int ax25_rt_autobind(ax25_cb *ax25, ax25_address *addr) | |||
432 | } | 432 | } |
433 | 433 | ||
434 | if (ax25_rt->digipeat != NULL) { | 434 | if (ax25_rt->digipeat != NULL) { |
435 | if ((ax25->digipeat = kmalloc(sizeof(ax25_digi), GFP_ATOMIC)) == NULL) { | 435 | ax25->digipeat = kmemdup(ax25_rt->digipeat, sizeof(ax25_digi), |
436 | GFP_ATOMIC); | ||
437 | if (ax25->digipeat == NULL) { | ||
436 | err = -ENOMEM; | 438 | err = -ENOMEM; |
437 | goto put; | 439 | goto put; |
438 | } | 440 | } |
439 | memcpy(ax25->digipeat, ax25_rt->digipeat, sizeof(ax25_digi)); | ||
440 | ax25_adjust_path(addr, ax25->digipeat); | 441 | ax25_adjust_path(addr, ax25->digipeat); |
441 | } | 442 | } |
442 | 443 | ||
diff --git a/net/ax25/sysctl_net_ax25.c b/net/ax25/sysctl_net_ax25.c index 867d42537979..d23a27f25d2f 100644 --- a/net/ax25/sysctl_net_ax25.c +++ b/net/ax25/sysctl_net_ax25.c | |||
@@ -209,7 +209,9 @@ void ax25_register_sysctl(void) | |||
209 | } | 209 | } |
210 | 210 | ||
211 | for (n = 0, ax25_dev = ax25_dev_list; ax25_dev != NULL; ax25_dev = ax25_dev->next) { | 211 | for (n = 0, ax25_dev = ax25_dev_list; ax25_dev != NULL; ax25_dev = ax25_dev->next) { |
212 | ctl_table *child = kmalloc(sizeof(ax25_param_table), GFP_ATOMIC); | 212 | struct ctl_table *child = kmemdup(ax25_param_table, |
213 | sizeof(ax25_param_table), | ||
214 | GFP_ATOMIC); | ||
213 | if (!child) { | 215 | if (!child) { |
214 | while (n--) | 216 | while (n--) |
215 | kfree(ax25_table[n].child); | 217 | kfree(ax25_table[n].child); |
@@ -217,7 +219,6 @@ void ax25_register_sysctl(void) | |||
217 | spin_unlock_bh(&ax25_dev_lock); | 219 | spin_unlock_bh(&ax25_dev_lock); |
218 | return; | 220 | return; |
219 | } | 221 | } |
220 | memcpy(child, ax25_param_table, sizeof(ax25_param_table)); | ||
221 | ax25_table[n].child = ax25_dev->systable = child; | 222 | ax25_table[n].child = ax25_dev->systable = child; |
222 | ax25_table[n].ctl_name = n + 1; | 223 | ax25_table[n].ctl_name = n + 1; |
223 | ax25_table[n].procname = ax25_dev->dev->name; | 224 | ax25_table[n].procname = ax25_dev->dev->name; |