I have "covered" up PPPoE Session ID's from users because it is a value that
is only gotten on the Data Link layer and historically non-root users did not
have access to that.  It really is a value that doesn't concern them.  I have
wrapped the display with a suser() conditional.  The magic value 0xFFFF is
not used/reserved according to RFC 2516.

as root:

beta# ifconfig pppoe0
pppoe0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1492
        index 12 priority 0 llprio 3
        dev:  state: initial
        sid: 0x0 PADI retries: 0 PADR retries: 0
        groups: pppoe

as non-root:

beta$ ifconfig pppoe0 
pppoe0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1492
        index 12 priority 0 llprio 3
        dev:  state: initial
        sid: 0xffff PADI retries: 0 PADR retries: 0
        groups: pppoe


patch follows:

Index: if_pppoe.c
===================================================================
RCS file: /cvs/src/sys/net/if_pppoe.c,v
retrieving revision 1.67
diff -u -p -u -r1.67 if_pppoe.c
--- if_pppoe.c  19 Feb 2018 08:59:52 -0000      1.67
+++ if_pppoe.c  18 Jan 2019 09:50:58 -0000
@@ -874,7 +876,12 @@ pppoe_ioctl(struct ifnet *ifp, unsigned 
                struct pppoeconnectionstate *state =
                    (struct pppoeconnectionstate *)data;
                state->state = sc->sc_state;
-               state->session_id = sc->sc_session;
+
+               if (! suser(p))
+                       state->session_id = sc->sc_session;
+               else
+                       state->session_id = 0xffff;     /* reserved sid */
+
                state->padi_retry_no = sc->sc_padi_retried;
                state->padr_retry_no = sc->sc_padr_retried;
                state->session_time.tv_sec = sc->sc_session_time.tv_sec;

Reply via email to