From 43dc8a31b9510a6f09053cf1f2eec765b532f1d1 Mon Sep 17 00:00:00 2001 From: Stephen Hemminger Date: Sun, 12 Oct 2003 22:38:13 -0700 Subject: [PATCH] [NET]: Fix syncppp wan device regression. In 2.6.0-test6, I put in a patch which fixed sealevel driver, but broke all the other wan devices because it got rid of one level of indirection. This puts back the indirection, and hopefully prevents others from misreading it the same way. The SPPP drivers expect that netdev->priv points to device local structure whose first element is a pointer to the ppp device. --- drivers/net/wan/syncppp.c | 3 +++ include/net/syncppp.h | 5 +++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/drivers/net/wan/syncppp.c b/drivers/net/wan/syncppp.c index 76ac55236929d..8cceec11df552 100644 --- a/drivers/net/wan/syncppp.c +++ b/drivers/net/wan/syncppp.c @@ -1069,6 +1069,9 @@ void sppp_attach(struct ppp_device *pd) struct sppp *sp = &pd->sppp; unsigned long flags; + /* Make sure embedding is safe for sppp_of */ + BUG_ON(sppp_of(dev) != sp); + spin_lock_irqsave(&spppq_lock, flags); /* Initialize keepalive handler. */ if (! spppq) diff --git a/include/net/syncppp.h b/include/net/syncppp.h index f2032606419e5..614cb6ba564e4 100644 --- a/include/net/syncppp.h +++ b/include/net/syncppp.h @@ -59,8 +59,9 @@ struct ppp_device static inline struct sppp *sppp_of(struct net_device *dev) { - struct ppp_device *ppp = dev->priv; - return &ppp->sppp; + struct ppp_device **ppp = dev->priv; + BUG_ON((*ppp)->dev != dev); + return &(*ppp)->sppp; } #define PP_KEEPALIVE 0x01 /* use keepalive protocol */ -- 2.53.0