Author: loos
Date: Sun Jan  8 20:37:41 2017
New Revision: 311700
URL: https://svnweb.freebsd.org/changeset/base/311700

Log:
  Convert etherswitch to use the make_dev_s(9) KPI.  This fix a possible race
  where si_drv1 can be accessed before it gets set.
  
  MFC after:    3 days
  Suggested by: kib
  Sponsored by: Rubicon Communications, LLC (Netgate)

Modified:
  head/sys/dev/etherswitch/etherswitch.c

Modified: head/sys/dev/etherswitch/etherswitch.c
==============================================================================
--- head/sys/dev/etherswitch/etherswitch.c      Sun Jan  8 20:29:35 2017        
(r311699)
+++ head/sys/dev/etherswitch/etherswitch.c      Sun Jan  8 20:37:41 2017        
(r311700)
@@ -99,17 +99,24 @@ etherswitch_probe(device_t dev)
 static int
 etherswitch_attach(device_t dev)
 {
-       struct etherswitch_softc *sc = (struct etherswitch_softc 
*)device_get_softc(dev);
+       int err;
+       struct etherswitch_softc *sc;
+       struct make_dev_args devargs;
 
+       sc = device_get_softc(dev);
        sc->sc_dev = dev;
-       sc->sc_devnode = make_dev(&etherswitch_cdevsw, device_get_unit(dev),
-                       UID_ROOT, GID_WHEEL,
-                       0600, "etherswitch%d", device_get_unit(dev));
-       if (sc->sc_devnode == NULL) {
+       make_dev_args_init(&devargs);
+       devargs.mda_devsw = &etherswitch_cdevsw;
+       devargs.mda_uid = UID_ROOT;
+       devargs.mda_gid = GID_WHEEL;
+       devargs.mda_mode = 0600;
+       devargs.mda_si_drv1 = sc;
+       err = make_dev_s(&devargs, &sc->sc_devnode, "etherswitch%d",
+           device_get_unit(dev));
+       if (err != 0) {
                device_printf(dev, "failed to create character device\n");
                return (ENXIO);
        }
-       sc->sc_devnode->si_drv1 = sc;
 
        return (0);
 }
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to