kern/110662: safenet driver causes kernel panic

Rajkumar S raj at linuxense.com
Thu Mar 22 07:40:07 UTC 2007


>Number:         110662
>Category:       kern
>Synopsis:       safenet driver causes kernel panic
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Thu Mar 22 07:40:06 GMT 2007
>Closed-Date:
>Last-Modified:
>Originator:     Rajkumar S
>Release:        FreeBSD 6.2-RELEASE-p3
>Organization:
Linuxense
>Environment:
>Description:
Hi,

I am trying to install SafeNet 1141 support in one of the freebsd
boxes here. according to safe(4), I have to add "device safe" into my
kernel config and compile to enable hardware crypto acceleration. But
after I boot with safe module enabled I get a kernel panic.

The last couple of lines in my boot message are

safe0 mem 0xf6120000-0xf6121fff irq 5 at device 10.0 on pci0
safe0: cannot allocate DMA tag
device_attach: safe0 attach returned 6
re0: <RealTek 8169S Single-chip Gigabit Ethernet> port 0xb000-0xb0ff mem 0xf6120
re0: could not allocate dma tag


Fatal trap 12: page fault while in kernel mode
fault virtual address   = 0x60
fault code              = supervisor read, page not present
instruction pointer     = 0x20:0xc0570ea5
stack pointer           = 0x28:0xc0c20bd0
frame pointer           = 0x28:0xc0c20be4
code segment            = base 0x0, limit 0xfffff, type 0x1b
                       = DPL 0, pres 1, def32 1, gran 1
processor eflags        = interrupt enabled, resume, IOPL = 0
current process         = 0 (swapper)
trap number             = 12
panic: page fault
Uptime: 1s

I have appended my kernel config at the end of this PR.

To test this further, I commented the "device safe" line from the
kernel config and this time the system booted up correctly. The diff
of the messages up to the point of panic is

--- embedded.txt        2007-03-16 15:59:52.528876360 +0530
+++ freebsd.dump        2007-03-16 15:58:18.852117392 +0530
@@ -3,7 +3,7 @@
        The Regents of the University of California. All rights
 reserved.
 FreeBSD is a registered trademark of The FreeBSD Foundation.
-FreeBSD 6.2-RELEASE-p3 #0: Fri Mar 16 08:57:36 UTC 2007
+FreeBSD 6.2-RELEASE-p3 #0: Thu Mar 15 11:46:30 UTC 2007

 root at beastie.linuxense.com:/usr/obj.pfSense/usr/src/sys/pfSense_wrap.6
 Timecounter "i8254" frequency 1193182 Hz quality 0
@@ -69,6 +69,24 @@
 rlphy7: <RealTek internal media interface> on miibus7
 rlphy7:  10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
 rl7: Ethernet address: 00:60:e0:04:29:e4
-pci0: <unknown> at device 10.0 (no driver attached)
+safe0 mem 0xf6120000-0xf6121fff irq 5 at device 10.0 on pci0
+safe0: cannot allocate DMA tag
+device_attach: safe0 attach returned 6
 re0: <RealTek 8169S Single-chip Gigabit Ethernet> port 0xb000-0xb0ff
mem 0xf6120
+re0: could not allocate dma tag
+
+
+Fatal trap 12: page fault while in kernel mode
+fault virtual address   = 0x60
+fault code              = supervisor read, page not present
+instruction pointer     = 0x20:0xc0570ea5
+stack pointer           = 0x28:0xc0c20bd0
+frame pointer           = 0x28:0xc0c20be4
+code segment            = base 0x0, limit 0xfffff, type 0x1b
+                        = DPL 0, pres 1, def32 1, gran 1
+processor eflags        = interrupt enabled, resume, IOPL = 0
+current process         = 0 (swapper)
+trap number             = 12
+panic: page fault
+Uptime: 1s

It's only 2 lines about could not allocate dma tag, I have searched
for this error message, but nothing came up.

raj

--
machine         i386
cpu             I486_CPU
cpu             I586_CPU
cpu             I686_CPU
ident           embedded

# To statically compile in device wiring instead of /boot/device.hints
#hints          "GENERIC.hints"         # Default places to look for devices.

options         COMPAT_FREEBSD5

options         CPU_GEODE
options         CPU_SOEKRIS
options         CPU_ELAN
#options                CPU_ELAN_PPS
#options                CPU_ELAN_XTAL=32768000

#options        SCHED_ULE               # ULE scheduler
options         SCHED_4BSD              # 4BSD scheduler
options         INET                    # InterNETworking
options         INET6                   # IPv6 communications protocols
options         FFS                     # Berkeley Fast Filesystem
options         SOFTUPDATES             # Enable FFS soft updates support
options         UFS_ACL                 # Support for access control lists
options         UFS_DIRHASH             # Improve performance on big directories
options         MD_ROOT                 # MD is a potential root device
options         NFSCLIENT               # Network Filesystem Client
options         NFSSERVER               # Network Filesystem Server
options         NFS_ROOT                # NFS usable as /, requires NFSCLIENT
options         MSDOSFS                 # MSDOS Filesystem
options         CD9660                  # ISO 9660 Filesystem
options         PROCFS                  # Process filesystem (requires PSEUDOFS)
options         PSEUDOFS                # Pseudo-filesystem framework
options         GEOM_GPT                # GUID Partition Tables.
options         COMPAT_43               # Compatible with BSD 4.3 [KEEP THIS!]
options         COMPAT_FREEBSD4         # Compatible with FreeBSD4
options         SCSI_DELAY=5000         # Delay (in ms) before probing SCSI
options         KTRACE                  # ktrace(1) support
options         SYSVSHM                 # SYSV-style shared memory
options         SYSVMSG                 # SYSV-style message queues
options         SYSVSEM                 # SYSV-style semaphores
options         _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time
extensions
options         KBD_INSTALL_CDEV        # install a CDEV entry in /dev
#options        AHC_REG_PRETTY_PRINT    # Print register bitfields in debug
                                       # output.  Adds ~128k to driver.
#options        AHD_REG_PRETTY_PRINT    # Print register bitfields in debug
                                       # output.  Adds ~215k to driver.

# Bus support.  Do not remove isa, even if you have no isa slots
device          isa
device          eisa
device          pci

# ATA and ATAPI devices
device          ata
device          atadisk         # ATA disk drives
device          ataraid         # ATA RAID drives
device          atapicd         # ATAPI CDROM drives
device          atapifd         # ATAPI floppy drives
device          atapist         # ATAPI tape drives
options         ATA_STATIC_ID     # Static device numbering

# SCSI Controllers
#device         ahb             # EISA AHA1742 family
device          ahc             # AHA2940 and onboard AIC7xxx devices
device          ahd             # AHA39320/29320 and onboard AIC79xx devices
#device         amd             # AMD 53C974 (Tekram DC-390(T))
#device         isp             # Qlogic family
#device         ispfw           # Firmware for QLogic HBAs- normally a module
#device         mpt             # LSI-Logic MPT-Fusion
#device         ncr             # NCR/Symbios Logic
#device         sym             # NCR/Symbios Logic (newer chipsets +
those of `ncr')
#device         trm             # Tekram DC395U/UW/F DC315U adapters
#device         adv             # Advansys SCSI adapters
#device         adw             # Advansys wide SCSI adapters
#device         aha             # Adaptec 154x SCSI adapters
#device         aic             # Adaptec 15[012]x SCSI adapters, AIC-6[23]60.
#device         bt              # Buslogic/Mylex MultiMaster SCSI adapters

#device         ncv             # NCR 53C500
#device         nsp             # Workbit Ninja SCSI-3
#device         stg             # TMC 18C30/18C50

# SCSI peripherals
device          scbus           # SCSI bus (required for SCSI)
#device         ch              # SCSI media changers
device          da              # Direct Access (disks)
#device         sa              # Sequential Access (tape etc)
device          cd              # CD
device          pass            # Passthrough device (direct SCSI access)
device          ses             # SCSI Environmental Services (and SAF-TE)

# RAID controllers interfaced to the SCSI subsystem
device          amr             # AMI MegaRAID
device          arcmsr          # Areca SATA II RAID
#device         asr             # DPT SmartRAID V, VI and Adaptec SCSI RAID
#device         ciss            # Compaq Smart RAID 5*
#device         dpt             # DPT Smartcache III, IV - See NOTES for options
device          hptmv           # Highpoint RocketRAID 182x
device          iir             # Intel Integrated RAID
#device         ips             # IBM (Adaptec) ServeRAID
#device         mly             # Mylex AcceleRAID/eXtremeRAID
device          twa             # 3ware 9000 series PATA/SATA RAID

# RAID controllers
device          aac             # Adaptec FSA RAID
device          aacp            # SCSI passthrough for aac (requires CAM)
device          ida             # Compaq Smart RAID
#device         mlx             # Mylex DAC960 family
device          pst             # Promise Supertrak SX6000
device          twe             # 3ware ATA RAID

# IO devices for console
device          atkbdc          # AT keyboard controller
device          atkbd           # AT keyboard
device          psm             # PS/2 mouse
device          kbdmux          # keyboard multiplexer
device          vga             # VGA video card driver
device          splash          # Splash screen and screen saver support
# syscons is the default console driver, resembling an SCO console
device          sc

# Floating point support - do not disable.
device          npx

# PCCARD (PCMCIA) support
# PCMCIA and cardbus bridge support
device          cbb             # cardbus (yenta) bridge
device          pccard          # PC Card (16-bit) bus
device          cardbus         # CardBus (32-bit) bus

# Serial (COM) ports
device          sio             # 8250, 16[45]50 based serial ports

# Parallel port
device          ppc
device          ppbus           # Parallel port bus (required)
device          ppi             # Parallel port interface device

# PCI Ethernet NICs.
device          de              # DEC/Intel DC21x4x (``Tulip'')
device          em              # Intel PRO/1000 adapter Gigabit Ethernet Card
device          ixgb            # Intel PRO/10GbE Ethernet Card
device          txp             # 3Com 3cR990 (``Typhoon'')
device          vx              # 3Com 3c590, 3c595 (``Vortex'')

# PCI Ethernet NICs that use the common MII bus controller code.
# NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!
device          miibus          # MII bus support
device          bfe             # Broadcom BCM440x 10/100 Ethernet
device          bge             # Broadcom BCM570xx Gigabit Ethernet
device          dc              # DEC/Intel 21143 and various workalikes
device          fxp             # Intel EtherExpress PRO/100B (82557, 82558)
device          lge             # Level 1 LXT1001 gigabit Ethernet
device          nge             # NatSemi DP83820 gigabit Ethernet
device          nve             # nVidia nForce MCP on-board Ethernet Networking
device          pcn             # AMD Am79C97x PCI 10/100(precedence over 'lnc')
device          re              # RealTek 8139C+/8169/8169S/8110S
device          rl              # RealTek 8129/8139
device          sf              # Adaptec AIC-6915 (``Starfire'')
device          sis             # Silicon Integrated Systems SiS 900/SiS 7016
device          sk              # SysKonnect SK-984x & SK-982x gigabit Ethernet
device          ste             # Sundance ST201 (D-Link DFE-550TX)
device          ti              # Alteon Networks Tigon I/II gigabit Ethernet
device          tl              # Texas Instruments ThunderLAN
device          tx              # SMC EtherPower II (83c170 ``EPIC'')
device          vge             # VIA VT612x gigabit Ethernet
device          vr              # VIA Rhine, Rhine II
device          wb              # Winbond W89C840F
device          xl              # 3Com 3c90x (``Boomerang'', ``Cyclone'')

# Wireless NIC cards
device          wlan            # 802.11 support
device          wlan_wep
device          wlan_ccmp
device          wlan_tkip
device          wlan_xauth
device          wlan_acl
device          ath
device          ath_rate_sample
device          ath_hal
device          an              # Aironet 4500/4800 802.11 wireless NICs.
device          awi             # BayStack 660 and others
device          ral             # Ralink Technology RT2500 wireless NICs.
device          wi              # WaveLAN/Intersil/Symbol 802.11 wireless NICs.
device          wl              # Older non 802.11 Wavelan wireless NIC.
#device          iwi                     # Intel PRO/Wireless 2200BG

# Pseudo devices.
device          loop            # Network loopback
device          mem             # Memory and kernel memory devices
device          io              # I/O device
device          random          # Entropy device
device          ether           # Ethernet support
device          sl              # Kernel SLIP
device          ppp             # Kernel PPP
device          tun             # Packet tunnel.
device          pty             # Pseudo-ttys (telnet etc)
device          md              # Memory "disks"
device          gif             # IPv6 and IPv4 tunneling
device          faith           # IPv6-to-IPv4 relaying (translation)

# The `bpf' device enables the Berkeley Packet Filter.
# Be aware of the administrative consequences of enabling this!
# Note that 'bpf' is required for DHCP.
device          bpf             # Berkeley packet filter

# USB support
device          uhci            # UHCI PCI->USB interface
device          ohci            # OHCI PCI->USB interface
device          ehci            # EHCI PCI->USB interface (USB 2.0)
device          usb                     # USB Bus (required)
#device         udbp            # USB Double Bulk Pipe devices
device          ugen            # Generic
device          ucom
# Uncommented at the request of colin
device          umass           # Disks/Mass storage - Requires scbus and da
device          ums                     # Mouse
# USB Ethernet, requires miibus
device          aue             # ADMtek USB Ethernet
device          axe             # ASIX Electronics USB Ethernet
device          cdce            # Generic USB over Ethernet
device          cue             # CATC USB Ethernet
device          kue             # Kawasaki LSI USB Ethernet
device          rue             # RealTek RTL8150 USB Ethernet

# FireWire support
#device         firewire        # FireWire bus code
#device         sbp             # SCSI over FireWire (Requires scbus and da)
#device         fwe             # Ethernet over FireWire (non-standard!)


# pfsense addons
device          wlan            # 802.11 support
device          wlan_wep
device          wlan_ccmp
device          wlan_tkip
device          wlan_xauth
device          wlan_acl
device          ath
device          ath_rate_sample
device          ath_hal
device          an              # Aironet 4500/4800 802.11 wireless NICs.
device          awi                             # BayStack 660 and others
device          ral                             # Ralink Technology
RT2500 wireless NICs.
device          wi              # WaveLAN/Intersil/Symbol 802.11 wireless NICs.
device          wl              # Older non 802.11 Wavelan wireless NIC.

device          tap
device          gre

options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         IPFIREWALL_FORWARD
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT
device          vlan

options         IPSTEALTH
options         TCP_DROP_SYNFIN         #drop TCP packets with SYN+FIN

options         GEOM_UZIP
options         GEOM_LABEL

options         NETGRAPH                #netgraph(4) system
options         NETGRAPH_BPF
options         NETGRAPH_ETHER
options         NETGRAPH_IFACE
options         NETGRAPH_PPP
options         NETGRAPH_PPPOE
options         NETGRAPH_PPTPGRE
options         NETGRAPH_RFC1490
options         NETGRAPH_SOCKET
options         NETGRAPH_TTY
options         NETGRAPH_MPPC_ENCRYPTION
#options        NETGRAPH_UI
#options        NETGRAPH_VJC
#options        NETGRAPH_KSOCKET
#options        NETGRAPH_LMI
#options        NETGRAPH_ONE2MANY
#options                NETGRAPH_BRIDGE
#options        NETGRAPH_CISCO
#options        NETGRAPH_ECHO
#options        NETGRAPH_ASYNC
#options        NETGRAPH_FRAME_RELAY
#options        NETGRAPH_HOLE
#options        NETGRAPH_TEE

device ubsa
device ucom

options         FAST_IPSEC
#device         enc

options         ALTQ
options         ALTQ_CBQ
options         ALTQ_RED
options         ALTQ_RIO
options         ALTQ_HFSC
options         ALTQ_PRIQ

device          pf
device          pflog
device          carp
device          pfsync

device          crypto          # core crypto support
device          cryptodev       # /dev/crypto for access to h/w
device          rndtest         # FIPS 140-2 entropy tester
device          hifn            # Hifn 7951, 7781, etc.
options         HIFN_DEBUG      # enable debugging support: hw.hifn.debug
options         HIFN_RNDTEST    # enable rndtest support
device          ubsec           # Broadcom 5501, 5601, 58xx
#device          safe            # SafeNet Support

device          if_bridge

device          speaker

device          hme

options         DEVICE_POLLING

options         ZERO_COPY_SOCKETS

options         HZ=100

device          bce             # Broadcom BCM5706/BCM5708 Gigabit Ethernet

options TCP_SIGNATURE

options         PREEMPTION
#options         NO_ADAPTIVE_MUTEXES
options         ADAPTIVE_GIANT          # Giant mutex is adaptive.

# Lighttpd
options   ACCEPT_FILTER_HTTP

# IPSEC filtering interface
device          enc
>How-To-Repeat:
The kernel panics every time the machine is booted.
>Fix:
I did some digging down of this problem. The problem causes at line 300 of safe.c [http://fxr.watson.org/fxr/source/dev/safe/safe.c?v=RELENG62#L300] The  bus_dma_tag_create function fails with the error ENOMEM. According to man page, the flag BUS_DMA_ALLOCNOW can cause this problem and is only a minor optimisation. So to check I change the flag to BUS_DMA_COHERENT. The diff is 

--- safe.c.orig Thu Mar 22 12:30:27 2007
+++ safe.c      Thu Mar 22 12:37:19 2007
@@ -291,7 +291,7 @@
                               SAFE_MAX_DMA,            /* maxsize */
                               SAFE_MAX_PART,           /* nsegments */
                               SAFE_MAX_SSIZE,          /* maxsegsize */
-                              BUS_DMA_ALLOCNOW,        /* flags */
+                              BUS_DMA_COHERENT,        /* flags */
                               NULL, NULL,              /* locking */
                               &sc->sc_srcdmat)) {
                device_printf(dev, "cannot allocate DMA tag\n");
@@ -306,7 +306,7 @@
                               SAFE_MAX_DMA,            /* maxsize */
                               SAFE_MAX_PART,           /* nsegments */
                               SAFE_MAX_DSIZE,          /* maxsegsize */
-                              BUS_DMA_ALLOCNOW,        /* flags */
+                              BUS_DMA_COHERENT,        /* flags */
                               NULL, NULL,              /* locking */
                               &sc->sc_dstdmat)) {
                device_printf(dev, "cannot allocate DMA tag\n");

Now the driver loads fine and /dev/crypto is available. I am also able to run cryptotest, but not completly. (sorry I do not have the error right now, I will append that later)

I chose BUS_DMA_COHERENT randomly as in trying out another flag with zero understand of what this means. 
>Release-Note:
>Audit-Trail:
>Unformatted:


More information about the freebsd-bugs mailing list