Module Name: src Committed By: mlelstv Date: Fri Mar 30 13:21:24 UTC 2018
Modified Files: src/sys/net: if_media.c Log Message: add prototypes, validate ifm_change and ifm_status vectors. NFC. To generate a diff of this commit: cvs rdiff -u -r1.35 -r1.36 src/sys/net/if_media.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/net/if_media.c diff -u src/sys/net/if_media.c:1.35 src/sys/net/if_media.c:1.36 --- src/sys/net/if_media.c:1.35 Wed Nov 22 03:03:18 2017 +++ src/sys/net/if_media.c Fri Mar 30 13:21:24 2018 @@ -1,4 +1,4 @@ -/* $NetBSD: if_media.c,v 1.35 2017/11/22 03:03:18 ozaki-r Exp $ */ +/* $NetBSD: if_media.c,v 1.36 2018/03/30 13:21:24 mlelstv Exp $ */ /*- * Copyright (c) 1998 The NetBSD Foundation, Inc. @@ -76,7 +76,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_media.c,v 1.35 2017/11/22 03:03:18 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_media.c,v 1.36 2018/03/30 13:21:24 mlelstv Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -89,6 +89,9 @@ __KERNEL_RCSID(0, "$NetBSD: if_media.c,v #include <net/if_media.h> #include <net/netisr.h> +static void ifmedia_status(struct ifmedia *, struct ifnet *, struct ifmediareq *); +static int _ifmedia_ioctl(struct ifnet *, struct ifreq *, struct ifmedia *, u_long); + /* * Compile-time options: * IFMEDIA_DEBUG: @@ -122,9 +125,22 @@ ifmedia_init(struct ifmedia *ifm, int do int ifmedia_change(struct ifmedia *ifm, struct ifnet *ifp) { + + if (ifm->ifm_change == NULL) + return -1; return (*ifm->ifm_change)(ifp); } +static void +ifmedia_status(struct ifmedia *ifm, struct ifnet *ifp, + struct ifmediareq *ifmr) +{ + + if (ifm->ifm_status == NULL) + return; + (*ifm->ifm_status)(ifp, ifmr); +} + /* * Add a media configuration to the list of supported media * for a specific interface instance. @@ -317,8 +333,7 @@ _ifmedia_ioctl(struct ifnet *ifp, struct ifm->ifm_cur->ifm_media : IFM_NONE; ifmr->ifm_mask = ifm->ifm_mask; ifmr->ifm_status = 0; - /* ifmedia_status */ - (*ifm->ifm_status)(ifp, ifmr); + ifmedia_status(ifm, ifp, ifmr); /* * Count them so we know a-priori how much is the max we'll