aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--net/ax25/af_ax25.c6
-rw-r--r--net/ax25/ax25_out.c4
-rw-r--r--net/ax25/ax25_route.c5
-rw-r--r--net/ax25/sysctl_net_ax25.c5
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;