IP-over-DDP packets dropped

Bug #1559772 reported by Adam Seering
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
linux (Ubuntu)
Fix Released
Medium
Seth Forshee

Bug Description

Ubuntu's kernel is compiled with CONFIG_IPDDP=m, which, because of an upstream bug, means that IP-over-DDP packets (DDP type 22) are silently dropped. This is true even if the generated "ipddp" module is not loaded; so if this module is compiled, there is no way to listen for these packets.

One solution would be to fix the module. Another (what CentOS appears to do?) would be to not compile the "ipddp" module at all -- remove CONFIG_IPDDP from the kernel's config.

Copying from the upstream bug for specific details:

https://bugzilla.kernel.org/show_bug.cgi?id=115031

"""
When a kernel is compiled with "ipddp" as a module, but the module is not loaded, DDP packets of type 22 (IP-over-DDP) are silently dropped.

Steps to reproduce:
1. Compile a kernel with 'ipddp' as a module. Do not load the module; make sure it is not loaded, just compiled.
2. Open up a DDP listening socket for packets of type 22, on any supported network interface. (Tested with Ethernet.)
3. Attempt to connect to and send data to this socket

Expected behavior:
- If module is loaded, packets will be unwrapped by the kernel and emitted as IP packets (so will not be received by the listening DDP socket)
- If module is not present, packets will be passed through to the listening DDP socket

Actual behavior:
- If module is not present but was compiled during the kernel build process, packets are silently discarded by the kernel
- If module is not present and was not compiled during the kernel build process, packets are passed through as expected
"""

Revision history for this message
Adam Seering (aseering) wrote :

CentOS does not build the "ipddp" module / does not set "CONFIG_IPDDP" in the kernel config, so appears to not be affected by this issue. I would be happy if Ubuntu resolved this issue by likewise no longer shipping this module.

For anyone not familiar, some background: DDP was Apple's proprietary networking protocol, used by Apple and early Macintosh computers prior to the widespread adoption of TCP and Ethernet.

"IP-over-DDP" (what this particular module is used for) encapsulates IP packets inside DDP packets. It's useful if your network supports DDP traffic but does not support IP traffic -- for example, Apple's LocalTalk serial-port-based networking standard. So you can browse the Web on a Mac that predates Ethernet. (Apple stopped supporting LocalTalk with the initial release of Mac OS X, and stopped shipping computers with LocalTalk-compatible serial ports at about the same time.)

The kernel's "Documentation/networking/ipddp.txt" says the following regarding setting up the "ipddp" module:

"""
Decapsulation - You will need to download a software package called MacGate.
(...)
Encapsulation - You will need to download a software daemon called ipddpd.
"""

(If the module isn't configured with one of these two programs, it doesn't do anything useful.) MacGate was last shipped in Debian Potato; the sources from that release appear to want a 2.0 kernel, and do not compile on my machine. I can't find sources for ipddpd online.

The functionality provided by the "ipddp" module is now also mostly provided by the userspace program "macipgw":
https://github.com/zero2sixd/macipgw
This program builds and works correctly on a stock Ubuntu LTS 14.04 x86_64 machine with a modified Ubuntu 4.2 kernel that omits "CONFIG_IPDDP=m" from its kernel config. (Of course, it doesn't work with stock Ubuntu kernels because of this bug.)

description: updated
Seth Forshee (sforshee)
affects: linux-lts-wily (Ubuntu) → linux (Ubuntu)
Revision history for this message
Brad Figg (brad-figg) wrote : Missing required logs.

This bug is missing log files that will aid in diagnosing the problem. From a terminal window please run:

apport-collect 1559772

and then change the status of the bug to 'Confirmed'.

If, due to the nature of the issue you have encountered, you are unable to run this command, please add a comment stating that fact and change the bug status to 'Confirmed'.

This change has been made by an automated script, maintained by the Ubuntu Kernel Team.

Changed in linux (Ubuntu):
status: New → Incomplete
Seth Forshee (sforshee)
Changed in linux (Ubuntu):
assignee: nobody → Seth Forshee (sforshee)
importance: Undecided → Medium
status: Incomplete → Confirmed
Revision history for this message
Seth Forshee (sforshee) wrote :

Pushed a commit to zesty to set CONFIG_IPDDP=n.

Changed in linux (Ubuntu):
status: Confirmed → Fix Committed
Revision history for this message
Launchpad Janitor (janitor) wrote :
Download full text (14.3 KiB)

This bug was fixed in the package linux - 4.9.0-12.13

---------------
linux (4.9.0-12.13) zesty; urgency=low

  [ Tim Gardner ]

  * Release Tracking Bug
    - LP: #1655122

  * Zesty update to v4.9.2 stable release (LP: #1655114)
    - ssb: Fix error routine when fallback SPROM fails
    - ath10k: fix soft lockup during firmware crash/hw-restart
    - rtlwifi: Fix enter/exit power_save
    - perf/x86: Fix exclusion of BTS and LBR for Goldmont
    - perf annotate: Don't throw error for zero length symbols
    - perf/x86/intel/cstate: Prevent hotplug callback leak
    - rtl8xxxu: Work around issue with 8192eu and 8723bu devices not reconnecting
    - cfg80211/mac80211: fix BSS leaks when abandoning assoc attempts
    - ath9k: fix ath9k_hw_gpio_get() to return 0 or 1 on success
    - ath9k: Really fix LED polarity for some Mini PCI AR9220 MB92 cards.
    - ath9k: do not return early to fix rcu unlocking
    - Revert "mmc: sdhci: Reset cmd and data circuits after tuning failure"
    - mmc: sdhci: Fix recovery from tuning timeout
    - regulator: stw481x-vmmc: fix ages old enable error
    - mmc: sd: Meet alignment requirements for raw_ssr DMA
    - timekeeping_Force_unsigned_clocksource_to_nanoseconds_conversion
    - gpio: stmpe: fix interrupt handling bug
    - gpio: chardev: Return error for seek operations
    - arm64: tegra: Add VDD_GPU regulator to Jetson TX1
    - clk: bcm2835: Avoid overwriting the div info when disabling a pll_div clk
    - thermal: hwmon: Properly report critical temperature in sysfs
    - docs: sphinx-extensions: make rstFlatTable work with docutils 0.13
    - hv: acquire vmbus_connection.channel_mutex in vmbus_free_channels()
    - staging/lustre/osc: Revert erroneous list_for_each_entry_safe use
    - staging: lustre: ldlm: pl_recalc time handling is wrong
    - staging: comedi: ni_mio_common: fix M Series ni_ai_insn_read() data mask
    - staging: comedi: ni_mio_common: fix E series ni_ai_insn_read() data
    - ACPI / video: Add force_native quirk for Dell XPS 17 L702X
    - ACPI / video: Add force_native quirk for HP Pavilion dv6
    - drm/amdgpu/si: load the proper firmware on 0x87 oland boards
    - drm/amdgpu: add additional pci revision to dpm workaround
    - drm/amdgpu: Store CRTC relative amdgpu_crtc->cursor_x/y values
    - drm/amdgpu: Also call cursor_move_locked when the cursor size changes
    - drm/amd/amdgpu: enable GUI idle INT after enabling CGCG
    - drm/nouveau/gr: fallback to legacy paths during firmware lookup
    - drm/nouveau/kms: lvds panel strap moved again on maxwell
    - drm/nouveau/bios: require checksum to match for fast acpi shadow method
    - drm/nouveau/ltc: protect clearing of comptags with mutex
    - drm/nouveau/ttm: wait for bo fence to signal before unmapping vmas
    - drm/nouveau/i2c/gk110b,gm10x: use the correct implementation
    - drm/nouveau/fifo/gf100-: protect channel preempt with subdev mutex
    - drm/radeon: Also call cursor_move_locked when the cursor size changes
    - drm/radeon: Hide the HW cursor while it's out of bounds
    - drm/radeon: add additional pci revision to dpm workaround
    - drm/radeon/si: load the proper firmware on 0x87 oland boards
    - drm/...

Changed in linux (Ubuntu):
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.