Skip to content

Commit

Permalink
llc2: Fix silent failure of llc_station_init()
Browse files Browse the repository at this point in the history
llc_station_init() creates and processes an event skb with no effect
other than to change the state from DOWN to UP.  Allocation failure is
reported, but then ignored by its caller, llc2_init().  Remove this
possibility by simply initialising the state as UP.

Signed-off-by: Ben Hutchings <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
bwhacks authored and davem330 committed Aug 14, 2012
1 parent 4855d6f commit 6024935
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 18 deletions.
2 changes: 1 addition & 1 deletion include/net/llc.h
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ extern int llc_build_and_send_ui_pkt(struct llc_sap *sap, struct sk_buff *skb,
extern void llc_sap_handler(struct llc_sap *sap, struct sk_buff *skb);
extern void llc_conn_handler(struct llc_sap *sap, struct sk_buff *skb);

extern int llc_station_init(void);
extern void llc_station_init(void);
extern void llc_station_exit(void);

#ifdef CONFIG_PROC_FS
Expand Down
19 changes: 2 additions & 17 deletions net/llc/llc_station.c
Original file line number Diff line number Diff line change
Expand Up @@ -687,33 +687,18 @@ static void llc_station_rcv(struct sk_buff *skb)
llc_station_state_process(skb);
}

int __init llc_station_init(void)
void __init llc_station_init(void)
{
int rc = -ENOBUFS;
struct sk_buff *skb;
struct llc_station_state_ev *ev;

skb_queue_head_init(&llc_main_station.mac_pdu_q);
skb_queue_head_init(&llc_main_station.ev_q.list);
spin_lock_init(&llc_main_station.ev_q.lock);
setup_timer(&llc_main_station.ack_timer, llc_station_ack_tmr_cb,
(unsigned long)&llc_main_station);
llc_main_station.ack_timer.expires = jiffies +
sysctl_llc_station_ack_timeout;
skb = alloc_skb(0, GFP_ATOMIC);
if (!skb)
goto out;
rc = 0;
llc_set_station_handler(llc_station_rcv);
ev = llc_station_ev(skb);
memset(ev, 0, sizeof(*ev));
llc_main_station.maximum_retry = 1;
llc_main_station.state = LLC_STATION_STATE_DOWN;
ev->type = LLC_STATION_EV_TYPE_SIMPLE;
ev->prim_type = LLC_STATION_EV_ENABLE_WITHOUT_DUP_ADDR_CHECK;
rc = llc_station_next_state(skb);
out:
return rc;
llc_main_station.state = LLC_STATION_STATE_UP;
}

void __exit llc_station_exit(void)
Expand Down

0 comments on commit 6024935

Please sign in to comment.