Bug 110662 - [safe] safenet driver causes kernel panic
Summary: [safe] safenet driver causes kernel panic
Status: Open
Alias: None
Product: Base System
Classification: Unclassified
Component: kern (show other bugs)
Version: 6.2-RELEASE
Hardware: Any Any
: Normal Affects Only Me
Assignee: freebsd-bugs (Nobody)
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2007-03-22 07:40 UTC by Rajkumar S
Modified: 2018-05-20 23:52 UTC (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Rajkumar S 2007-03-22 07:40:06 UTC
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 rx0, 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@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 rx0, 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

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 



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.--wsTI12pIgYdLOX0CCqeY76ybEwQ1EVxTi6QLRXRlJJlUjsSF
Content-Type: text/plain; name="file.diff"
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="file.diff"

--- 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");
How-To-Repeat: The kernel panics every time the machine is booted.
Comment 1 Craig Rodrigues 2007-03-24 14:41:04 UTC
On Sat, Mar 24, 2007 at 05:24:28PM +0530, Rajkumar S. wrote:
> Done. Here is the trace output. I have left the address that occur  
> inside brackets, because I had to manually type them in from another  
> machine. I can resent them if they are important.
> 
> raj
> 
> device_attach () at device_attach+0x58
> device_probe_and_attach() at device_probe_and_attach+0xc4
> bus_generic_attach() at bus_generic_attach+0x16
> acpi_pci_attach() at acpi_pci_attach+0xd0
> device_attach()
> device_probe_and_attach()
> bus_generic_attach()
> acpi_pcib_attach()
> acpi_pcib_acpi_attach()
> device_attach()
> device_probe_and_attach()
> bus_generic_attach()
> acpi_pci_attach()
> device_attach()
> device_probe_and_attach()
> bus_generic_attach()
> nexus_attach()
> device_attach()
> device_probe_and_attach()
> bus_generic_attach()
> acpi_pcib_attach()
> acpi_pcib_acpi_attach()
> device_attach()
> device_probe_and_attach()
> bus_generic_attach()
> acpi_attach()
> device_attach()
> device_probe_and_attach()
> bus_generic_attach()
> nexus_attach()
> device_attach()
> device_probe_and_attach()
> root_bus_configure()
> configure()
> mi_startup()
> begin()
>
Comment 2 Sam Leffler freebsd_committer freebsd_triage 2007-03-25 04:17:47 UTC
State Changed
From-To: open->analyzed

The problem is reproducible.  There are several issues.  The failure 
to create the bus dma tag is because there is a 4-byte alignment 
requirement set for the dst dma tag and BUS_DMA_ALLOCNOW is specified. 
This causes an attempt to pre-allocate a bunch of memory to the 
bounce page zone which fails.  Removing BUS_DMA_ALLOCNOW does not 
work however because the safe driver is not prepared for bus dma 
setup requests to be deferred.  If that happens then the driver 
will crash because it assumes the dma setup always succeeds and so 
blindly stuffs a bogus physical address into the dma engine. 

It appears the alignment requirement is actually not needed however; 
though I must re-check the chip specs and code to make sure.  Applying 
the following change avoids the bounce page issue and allows 
cryptotest to run to completion but it likely provides only 
properly-aligned dst buffers so this may just mask a problem that 
will crop up for other consumers such as fast ipsec.  As I said 
already I need to investigate more before committing a fix. 

cvs diff: Diffing . 
Index: safe.c 
=================================================================== 
RCS file: /usr/ncvs/src/sys/dev/safe/safe.c,v 
retrieving revision 1.17 
diff -u -r1.17 safe.c 
--- safe.c      23 Feb 2007 12:18:52 -0000      1.17 
+++ safe.c      25 Mar 2007 03:23:03 -0000 
@@ -298,7 +298,7 @@ 
goto bad4; 
} 
if (bus_dma_tag_create(NULL,                    /* parent */ 
-                              sizeof(u_int32_t),       /* alignment */ 
+                              1,                       /* alignment */ 
SAFE_MAX_DSIZE,          /* boundary */ 
BUS_SPACE_MAXADDR_32BIT, /* lowaddr */ 
BUS_SPACE_MAXADDR,       /* highaddr */
Comment 3 Sam Leffler freebsd_committer freebsd_triage 2007-03-25 04:27:37 UTC
Responsible Changed
From-To: freebsd-bugs->sam

mean to assign to me
Comment 4 dfilter service freebsd_committer freebsd_triage 2007-11-03 19:10:43 UTC
sam         2007-11-03 19:10:14 UTC

  FreeBSD src repository

  Modified files:
    sys/dev/safe         safe.c 
  Log:
  bandaid crash as I have no time to research the issue and the driver
  is unusable in its present state; refer to the PR for details
  
  PR:             kern/110662
  MFC after:      3 days
  
  Revision  Changes    Path
  1.19      +1 -1      src/sys/dev/safe/safe.c
_______________________________________________
cvs-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/cvs-all
To unsubscribe, send any mail to "cvs-all-unsubscribe@freebsd.org"
Comment 5 Mark Linimon freebsd_committer freebsd_triage 2008-02-29 02:35:06 UTC
State Changed
From-To: analyzed->patched

Still needs MFC to RELENG_6.  Note to next person to touch this PR: 
once it's MFCed, it needs to be set back to 'analyzed', not 'closed', 
as the commit is just a workaround.
Comment 6 Eitan Adler freebsd_committer freebsd_triage 2011-11-15 16:53:54 UTC
State Changed
From-To: patched->analyzed

6 is no longer supported so follow linimon's advice and set pr to 
analyzed
Comment 7 Mark Linimon freebsd_committer freebsd_triage 2013-02-24 22:58:48 UTC
Responsible Changed
From-To: sam->freebsd-bugs

Sam has not been active in some time.
Comment 8 Eitan Adler freebsd_committer freebsd_triage 2018-05-20 23:52:43 UTC
For bugs matching the following conditions:
- Status == In Progress
- Assignee == "bugs@FreeBSD.org"
- Last Modified Year <= 2017

Do
- Set Status to "Open"