[AX25]: Make ax2asc thread-proof
Ax2asc was still using a static buffer for all invocations which isn't exactly SMP-safe. Change ax2asc to take an additional result buffer as the argument. Change all callers to provide such a buffer. Signed-off-by: Ralf Baechle DL5RB <ralf@linux-mips.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
f2c383988d
commit
f75268cd6c
@@ -851,6 +851,7 @@ int rose_route_frame(struct sk_buff *skb, ax25_cb *ax25)
|
||||
unsigned char cause, diagnostic;
|
||||
struct net_device *dev;
|
||||
int len, res = 0;
|
||||
char buf[11];
|
||||
|
||||
#if 0
|
||||
if (call_in_firewall(PF_ROSE, skb->dev, skb->data, NULL, &skb) != FW_ACCEPT)
|
||||
@@ -876,7 +877,7 @@ int rose_route_frame(struct sk_buff *skb, ax25_cb *ax25)
|
||||
|
||||
if (rose_neigh == NULL) {
|
||||
printk("rose_route : unknown neighbour or device %s\n",
|
||||
ax2asc(&ax25->dest_addr));
|
||||
ax2asc(buf, &ax25->dest_addr));
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -1178,6 +1179,7 @@ static void rose_neigh_stop(struct seq_file *seq, void *v)
|
||||
|
||||
static int rose_neigh_show(struct seq_file *seq, void *v)
|
||||
{
|
||||
char buf[11];
|
||||
int i;
|
||||
|
||||
if (v == SEQ_START_TOKEN)
|
||||
@@ -1189,7 +1191,7 @@ static int rose_neigh_show(struct seq_file *seq, void *v)
|
||||
/* if (!rose_neigh->loopback) { */
|
||||
seq_printf(seq, "%05d %-9s %-4s %3d %3d %3s %3s %3lu %3lu",
|
||||
rose_neigh->number,
|
||||
(rose_neigh->loopback) ? "RSLOOP-0" : ax2asc(&rose_neigh->callsign),
|
||||
(rose_neigh->loopback) ? "RSLOOP-0" : ax2asc(buf, &rose_neigh->callsign),
|
||||
rose_neigh->dev ? rose_neigh->dev->name : "???",
|
||||
rose_neigh->count,
|
||||
rose_neigh->use,
|
||||
@@ -1200,7 +1202,7 @@ static int rose_neigh_show(struct seq_file *seq, void *v)
|
||||
|
||||
if (rose_neigh->digipeat != NULL) {
|
||||
for (i = 0; i < rose_neigh->digipeat->ndigi; i++)
|
||||
seq_printf(seq, " %s", ax2asc(&rose_neigh->digipeat->calls[i]));
|
||||
seq_printf(seq, " %s", ax2asc(buf, &rose_neigh->digipeat->calls[i]));
|
||||
}
|
||||
|
||||
seq_puts(seq, "\n");
|
||||
@@ -1260,6 +1262,8 @@ static void rose_route_stop(struct seq_file *seq, void *v)
|
||||
|
||||
static int rose_route_show(struct seq_file *seq, void *v)
|
||||
{
|
||||
char buf[11];
|
||||
|
||||
if (v == SEQ_START_TOKEN)
|
||||
seq_puts(seq,
|
||||
"lci address callsign neigh <-> lci address callsign neigh\n");
|
||||
@@ -1271,7 +1275,7 @@ static int rose_route_show(struct seq_file *seq, void *v)
|
||||
"%3.3X %-10s %-9s %05d ",
|
||||
rose_route->lci1,
|
||||
rose2asc(&rose_route->src_addr),
|
||||
ax2asc(&rose_route->src_call),
|
||||
ax2asc(buf, &rose_route->src_call),
|
||||
rose_route->neigh1->number);
|
||||
else
|
||||
seq_puts(seq,
|
||||
@@ -1282,7 +1286,7 @@ static int rose_route_show(struct seq_file *seq, void *v)
|
||||
"%3.3X %-10s %-9s %05d\n",
|
||||
rose_route->lci2,
|
||||
rose2asc(&rose_route->dest_addr),
|
||||
ax2asc(&rose_route->dest_call),
|
||||
ax2asc(buf, &rose_route->dest_call),
|
||||
rose_route->neigh2->number);
|
||||
else
|
||||
seq_puts(seq,
|
||||
|
Reference in New Issue
Block a user