Tue Apr 13 04:57:15 2021 UTC ()
Added a NULL check for parent interface of pppoe


(yamaguchi)
diff -r1.159 -r1.160 src/sys/net/if_pppoe.c

cvs diff -r1.159 -r1.160 src/sys/net/if_pppoe.c (expand / switch to unified diff)

--- src/sys/net/if_pppoe.c 2021/04/13 04:53:22 1.159
+++ src/sys/net/if_pppoe.c 2021/04/13 04:57:15 1.160
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1/* $NetBSD: if_pppoe.c,v 1.159 2021/04/13 04:53:22 yamaguchi Exp $ */ 1/* $NetBSD: if_pppoe.c,v 1.160 2021/04/13 04:57:15 yamaguchi Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2002, 2008 The NetBSD Foundation, Inc. 4 * Copyright (c) 2002, 2008 The NetBSD Foundation, Inc.
5 * All rights reserved. 5 * All rights reserved.
6 * 6 *
7 * This code is derived from software contributed to The NetBSD Foundation 7 * This code is derived from software contributed to The NetBSD Foundation
8 * by Martin Husemann <martin@NetBSD.org>. 8 * by Martin Husemann <martin@NetBSD.org>.
9 * 9 *
10 * Redistribution and use in source and binary forms, with or without 10 * Redistribution and use in source and binary forms, with or without
11 * modification, are permitted provided that the following conditions 11 * modification, are permitted provided that the following conditions
12 * are met: 12 * are met:
13 * 1. Redistributions of source code must retain the above copyright 13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer. 14 * notice, this list of conditions and the following disclaimer.
@@ -20,27 +20,27 @@ @@ -20,27 +20,27 @@
20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 20 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 21 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 22 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 26 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 27 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29 * POSSIBILITY OF SUCH DAMAGE. 29 * POSSIBILITY OF SUCH DAMAGE.
30 */ 30 */
31 31
32#include <sys/cdefs.h> 32#include <sys/cdefs.h>
33__KERNEL_RCSID(0, "$NetBSD: if_pppoe.c,v 1.159 2021/04/13 04:53:22 yamaguchi Exp $"); 33__KERNEL_RCSID(0, "$NetBSD: if_pppoe.c,v 1.160 2021/04/13 04:57:15 yamaguchi Exp $");
34 34
35#ifdef _KERNEL_OPT 35#ifdef _KERNEL_OPT
36#include "pppoe.h" 36#include "pppoe.h"
37#include "opt_pppoe.h" 37#include "opt_pppoe.h"
38#include "opt_net_mpsafe.h" 38#include "opt_net_mpsafe.h"
39#endif 39#endif
40 40
41#include <sys/param.h> 41#include <sys/param.h>
42#include <sys/systm.h> 42#include <sys/systm.h>
43#include <sys/kernel.h> 43#include <sys/kernel.h>
44#include <sys/atomic.h> 44#include <sys/atomic.h>
45#include <sys/callout.h> 45#include <sys/callout.h>
46#include <sys/malloc.h> 46#include <sys/malloc.h>
@@ -523,27 +523,27 @@ pppoe_find_softc_by_hunique(uint8_t *tok @@ -523,27 +523,27 @@ pppoe_find_softc_by_hunique(uint8_t *tok
523 if (LIST_EMPTY(&pppoe_softc_list)) { 523 if (LIST_EMPTY(&pppoe_softc_list)) {
524 rw_exit(&pppoe_softc_list_lock); 524 rw_exit(&pppoe_softc_list_lock);
525 return NULL; 525 return NULL;
526 } 526 }
527 527
528 if (len != sizeof(sc->sc_id)) { 528 if (len != sizeof(sc->sc_id)) {
529 rw_exit(&pppoe_softc_list_lock); 529 rw_exit(&pppoe_softc_list_lock);
530 return NULL; 530 return NULL;
531 } 531 }
532 memcpy(&t, token, len); 532 memcpy(&t, token, len);
533 533
534 LIST_FOREACH(sc, &pppoe_softc_list, sc_list) { 534 LIST_FOREACH(sc, &pppoe_softc_list, sc_list) {
535 PPPOE_LOCK(sc, lock); 535 PPPOE_LOCK(sc, lock);
536 if (sc->sc_id == t) { 536 if (sc->sc_id == t && sc->sc_eth_if != NULL) {
537 break; 537 break;
538 } 538 }
539 PPPOE_UNLOCK(sc); 539 PPPOE_UNLOCK(sc);
540 } 540 }
541 rw_exit(&pppoe_softc_list_lock); 541 rw_exit(&pppoe_softc_list_lock);
542 542
543 if (sc == NULL) { 543 if (sc == NULL) {
544 pppoe_printf(NULL, "alien host unique tag" 544 pppoe_printf(NULL, "alien host unique tag"
545 ", no session found\n"); 545 ", no session found\n");
546 return NULL; 546 return NULL;
547 } 547 }
548 548
549 /* should be safe to access *sc now */ 549 /* should be safe to access *sc now */