>Synopsis:      ping6 prints wrong source address if "-V rtable" switch is used.
>Category:      user
>Environment:
        System      : OpenBSD 5.7
        Details     : OpenBSD 5.7-stable (GENERIC) #2: Fri Aug 14 15:13:51 AEST 
2015
                         
[email protected]:/usr/src/sys/arch/amd64/compile/GENERIC

        Architecture: OpenBSD.amd64
        Machine     : amd64
>Description:
        When determining the source address to print (this bug is display only, 
it does not
affect the actual packet on the wire) ping6 does not take into account whether 
the -V option has
been given to select an alternate routing table. It therefore uses the default 
routing table.
        
>How-To-Repeat:

$ route -n -T 2 show -inet6
Routing tables

Internet6:
Destination                        Gateway                        Flags   Refs  
    Use   Mtu  Prio Iface
default                            ::1                            UGS        0  
     85     -     8 pppoe2
2001:44b8:2110:3665::/64           fe80::223:7dff:fe1c:decb%pppoe2 U          0 
       0     -     4 pppoe2
2001:44b8:2110:3665::1             2001:44b8:2110:3665::1         Hl         0  
      0     -     1 lo0
fe80::%pppoe2/64                   fe80::223:7dff:fe1c:decb%pppoe2 U          0 
       0     -     4 pppoe2
fe80::223:7dff:fe1c:decb%pppoe2    fe80::223:7dff:fe1c:decb%pppoe2 Hl         0 
       0     -     1 lo0
ff01::%pppoe2/32                   fe80::223:7dff:fe1c:decb%pppoe2 UC         0 
       0     -     4 pppoe2
ff02::%pppoe2/32                   fe80::223:7dff:fe1c:decb%pppoe2 UC         1 
       0     -     4 pppoe2
ff02::1:2%pppoe2                   fe80::223:7dff:fe1c:decb%pppoe2 UHc        1 
      53     -     4 pppoe2

$ ifconfig pppoe2 | grep inet6
        inet6 fe80::223:7dff:fe1c:decb%pppoe2 ->  prefixlen 64 scopeid 0x11
        inet6 2001:44b8:2110:3665::1 ->  prefixlen 64

$ ping6 -V2 google.com
PING6(56=40+8+8 bytes) 2001:44b8:2126:b865::1 --> 2404:6800:4006:801::200e
16 bytes from 2404:6800:4006:801::200e, icmp_seq=0 hlim=58 time=33.145 ms

        (expecting to see 2001:44b8:2110:3665::1, but seeing 
2001:44b8:2126:b865::1) 

$ sudo tcpdump -nvvi pppoe2 icmp6
tcpdump: listening on pppoe2, link-type PPP_ETHER
12:10:34.798301 2001:44b8:2110:3665::1 > 2404:6800:4006:800::200e: icmp6: echo 
request (id:4ec1 seq:4) [icmp6 cksum ok] (len 16, hlim 64)

        (packet is actually sent from correct address)
        
>Fix:

Index: sbin/ping6/ping6.c
===================================================================
RCS file: /cvs/src/sbin/ping6/ping6.c,v
retrieving revision 1.101
diff -u -p -u -r1.101 ping6.c
--- sbin/ping6/ping6.c  16 Jan 2015 06:40:00 -0000      1.101
+++ sbin/ping6/ping6.c  26 Aug 2015 01:50:02 -0000
@@ -261,7 +261,7 @@ main(int argc, char *argv[])
        size_t rthlen;
        int mflag = 0;
        uid_t uid;
-       u_int rtableid;
+       u_int rtableid = 0;

        if ((s = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6)) < 0)
                err(1, "socket");
@@ -763,6 +763,11 @@ main(int argc, char *argv[])
                    setsockopt(dummy, IPPROTO_IPV6, IPV6_RTHDR,
                    (void *)rthdr, (rthdr->ip6r_len + 1) << 3))
                        err(1, "UDP setsockopt(IPV6_RTHDR)");
+
+                if (rtableid > 0 &&
+                   setsockopt(dummy, SOL_SOCKET, SO_RTABLE, &rtableid,
+                   sizeof(rtableid)) < 0)
+                       err(1, "setsockopt(SO_RTABLE)");

                if (connect(dummy, (struct sockaddr *)&src, len) < 0)
                        err(1, "UDP connect");


        


dmesg:
OpenBSD 5.7-stable (GENERIC) #2: Fri Aug 14 15:13:51 AEST 2015
    [email protected]:/usr/src/sys/arch/amd64/compile/GENERIC
real mem = 4101713920 (3911MB)
avail mem = 3988647936 (3803MB)
mpath0 at root
scsibus0 at mpath0: 256 targets
mainbus0 at root
bios0 at mainbus0: SMBIOS rev. 2.5 @ 0xe9f80 (86 entries)
bios0: vendor Hewlett-Packard version "786G1 v01.08" date 08/25/2008
bios0: Hewlett-Packard HP Compaq dc7900 Small Form Factor
acpi0 at bios0: rev 0
acpi0: sleep states S0 S3 S4 S5
acpi0: tables DSDT FACP APIC ASF! MCFG TCPA SLIC HPET DMAR
acpi0: wakeup devices COM1(S4) COM2(S4) PCI0(S4) PEG1(S4) PEG2(S4) IGBE(S4) 
PCX1(S4) PCX2(S4) PCX5(S4) PCX6(S4) HUB_(S4) USB1(S3) USB2(S3) USB3(S3) 
USB4(S3) USB5(S3) [...]
acpitimer0 at acpi0: 3579545 Hz, 24 bits
acpimadt0 at acpi0 addr 0xfee00000: PC-AT compat
cpu0 at mainbus0: apid 0 (boot processor)
cpu0: Intel(R) Core(TM)2 Duo CPU E8400 @ 3.00GHz, 2992.88 MHz
cpu0: 
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,DTES64,MWAIT,DS-CPL,VMX,SMX,EST,TM2,SSSE3,CX16,xTPR,PDCM,SSE4.1,XSAVE,NXE,LONG,LAHF,PERF
cpu0: 6MB 64b/line 16-way L2 cache
cpu0: smt 0, core 0, package 0
mtrr: Pentium Pro MTRR support, 8 var ranges, 88 fixed ranges
cpu0: apic clock running at 332MHz
cpu at mainbus0: not configured
ioapic0 at mainbus0: apid 1 pa 0xfec00000, version 20, 24 pins
ioapic0: misconfigured as apic 0, remapped to apid 1
acpimcfg0 at acpi0 addr 0xf4000000, bus 0-63
acpihpet0 at acpi0: 14318179 Hz
acpiprt0 at acpi0: bus 0 (PCI0)
acpiprt1 at acpi0: bus -1 (PEG1)
acpiprt2 at acpi0: bus -1 (PEG2)
acpiprt3 at acpi0: bus 32 (PCX1)
acpiprt4 at acpi0: bus -1 (PCX2)
acpiprt5 at acpi0: bus 48 (PCX5)
acpiprt6 at acpi0: bus -1 (PCX6)
acpiprt7 at acpi0: bus 7 (HUB_)
acpicpu0 at acpi0: C2, C1, PSS
acpibtn0 at acpi0: PBTN
cpu0: Enhanced SpeedStep 2992 MHz: speeds: 3000, 1998 MHz
pci0 at mainbus0 bus 0
pchb0 at pci0 dev 0 function 0 "Intel Q45 Host" rev 0x03
vga1 at pci0 dev 2 function 0 "Intel Q45 Video" rev 0x03
intagp0 at vga1
agp0 at intagp0: aperture at 0xe0000000, size 0x10000000
inteldrm0 at vga1
drm0 at inteldrm0
inteldrm0: 1024x768
wsdisplay0 at vga1 mux 1: console (std, vt100 emulation)
wsdisplay0: screen 1-5 added (std, vt100 emulation)
"Intel Q45 Video" rev 0x03 at pci0 dev 2 function 1 not configured
"Intel Q45 HECI" rev 0x03 at pci0 dev 3 function 0 not configured
pciide0 at pci0 dev 3 function 2 "Intel Q45 PT IDER" rev 0x03: DMA 
(unsupported), channel 0 wired to native-PCI, channel 1 wired to native-PCI
pciide0: using apic 1 int 18 for native-PCI interrupt
pciide0: channel 0 ignored (not responding; disabled or no drives?)
pciide0: channel 1 ignored (not responding; disabled or no drives?)
puc0 at pci0 dev 3 function 3 "Intel Q45 KT" rev 0x03: ports: 1 com
com4 at puc0 port 0 apic 1 int 17: ns16550a, 16 byte fifo
com4: probed fifo depth: 15 bytes
em0 at pci0 dev 25 function 0 "Intel ICH10 D BM LM" rev 0x02: msi, address 
00:23:7d:1c:de:cb
uhci0 at pci0 dev 26 function 0 "Intel 82801JD USB" rev 0x02: apic 1 int 20
uhci1 at pci0 dev 26 function 1 "Intel 82801JD USB" rev 0x02: apic 1 int 21
uhci2 at pci0 dev 26 function 2 "Intel 82801JD USB" rev 0x02: apic 1 int 22
ehci0 at pci0 dev 26 function 7 "Intel 82801JD USB" rev 0x02: apic 1 int 22
usb0 at ehci0: USB revision 2.0
uhub0 at usb0 "Intel EHCI root hub" rev 2.00/1.00 addr 1
azalia0 at pci0 dev 27 function 0 "Intel 82801JD HD Audio" rev 0x02: msi
azalia0: codecs: Analog Devices AD1884A
audio0 at azalia0
ppb0 at pci0 dev 28 function 0 "Intel 82801JD PCIE" rev 0x02: msi
pci1 at ppb0 bus 32
ppb1 at pci0 dev 28 function 4 "Intel 82801JD PCIE" rev 0x02: msi
pci2 at ppb1 bus 48
em1 at pci2 dev 0 function 0 "Intel 82574L" rev 0x00: msi, address 
68:05:ca:2f:16:34
uhci3 at pci0 dev 29 function 0 "Intel 82801JD USB" rev 0x02: apic 1 int 20
uhci4 at pci0 dev 29 function 1 "Intel 82801JD USB" rev 0x02: apic 1 int 21
uhci5 at pci0 dev 29 function 2 "Intel 82801JD USB" rev 0x02: apic 1 int 22
ehci1 at pci0 dev 29 function 7 "Intel 82801JD USB" rev 0x02: apic 1 int 20
usb1 at ehci1: USB revision 2.0
uhub1 at usb1 "Intel EHCI root hub" rev 2.00/1.00 addr 1
ppb2 at pci0 dev 30 function 0 "Intel 82801BA Hub-to-PCI" rev 0xa2
pci3 at ppb2 bus 7
pcib0 at pci0 dev 31 function 0 "Intel 82801JDO LPC" rev 0x02
ahci0 at pci0 dev 31 function 2 "Intel 82801JD AHCI" rev 0x02: msi, AHCI 1.2
ahci0: PHY offline on port 2
scsibus1 at ahci0: 32 targets
sd0 at scsibus1 targ 0 lun 0: <ATA, WDC WD800AAJS-60, 02.0> SCSI3 0/direct 
fixed naa.50014ee10154c4fe
sd0: 76319MB, 512 bytes/sector, 156301488 sectors
cd0 at scsibus1 targ 1 lun 0: <HL-DT-ST, DVD-RAM GH15L, RA02> ATAPI 5/cdrom 
removable
usb2 at uhci0: USB revision 1.0
uhub2 at usb2 "Intel UHCI root hub" rev 1.00/1.00 addr 1
usb3 at uhci1: USB revision 1.0
uhub3 at usb3 "Intel UHCI root hub" rev 1.00/1.00 addr 1
usb4 at uhci2: USB revision 1.0
uhub4 at usb4 "Intel UHCI root hub" rev 1.00/1.00 addr 1
usb5 at uhci3: USB revision 1.0
uhub5 at usb5 "Intel UHCI root hub" rev 1.00/1.00 addr 1
usb6 at uhci4: USB revision 1.0
uhub6 at usb6 "Intel UHCI root hub" rev 1.00/1.00 addr 1
usb7 at uhci5: USB revision 1.0
uhub7 at usb7 "Intel UHCI root hub" rev 1.00/1.00 addr 1
isa0 at pcib0
isadma0 at isa0
fdc0 at isa0 port 0x3f0/6 irq 6 drq 2
com0 at isa0 port 0x3f8/8 irq 4: ns16550a, 16 byte fifo
pckbc0 at isa0 port 0x60/5
pckbd0 at pckbc0 (kbd slot)
pckbc0: using irq 1 for kbd slot
wskbd0 at pckbd0: console keyboard, using wsdisplay0
pcppi0 at isa0 port 0x61
spkr0 at pcppi0
uhidev0 at uhub3 port 1 configuration 1 interface 0 "EATON Eaton 5PX" rev 
1.10/1.00 addr 2
uhidev0: iclass 3/0, 254 report ids
uhid0 at uhidev0 reportid 1: input=1, output=0, feature=1
uhid1 at uhidev0 reportid 2: input=1, output=0, feature=1
uhid2 at uhidev0 reportid 3: input=1, output=0, feature=1
uhid3 at uhidev0 reportid 6: input=4, output=0, feature=4
uhid4 at uhidev0 reportid 7: input=0, output=0, feature=2
uhid5 at uhidev0 reportid 8: input=0, output=0, feature=1
uhid6 at uhidev0 reportid 9: input=0, output=0, feature=4
uhid7 at uhidev0 reportid 10: input=0, output=0, feature=4
uhid8 at uhidev0 reportid 11: input=0, output=0, feature=5
uhid9 at uhidev0 reportid 12: input=0, output=0, feature=1
uhid10 at uhidev0 reportid 13: input=0, output=0, feature=2
uhid11 at uhidev0 reportid 14: input=0, output=0, feature=1
uhid12 at uhidev0 reportid 15: input=1, output=0, feature=1
uhid13 at uhidev0 reportid 16: input=0, output=0, feature=7
uhid14 at uhidev0 reportid 17: input=0, output=0, feature=1
uhid15 at uhidev0 reportid 18: input=0, output=0, feature=1
uhid16 at uhidev0 reportid 19: input=0, output=0, feature=1
uhid17 at uhidev0 reportid 20: input=0, output=0, feature=1
uhid18 at uhidev0 reportid 21: input=0, output=0, feature=2
uhid19 at uhidev0 reportid 22: input=0, output=0, feature=1
uhid20 at uhidev0 reportid 24: input=0, output=0, feature=4
uhid21 at uhidev0 reportid 32: input=0, output=0, feature=3
uhid22 at uhidev0 reportid 33: input=0, output=0, feature=1
uhid23 at uhidev0 reportid 34: input=0, output=0, feature=1
uhid24 at uhidev0 reportid 35: input=0, output=0, feature=4
uhid25 at uhidev0 reportid 36: input=0, output=0, feature=1
uhid26 at uhidev0 reportid 37: input=0, output=0, feature=4
uhid27 at uhidev0 reportid 38: input=0, output=0, feature=2
uhid28 at uhidev0 reportid 39: input=6, output=0, feature=6
uhid29 at uhidev0 reportid 40: input=0, output=0, feature=1
uhid30 at uhidev0 reportid 41: input=0, output=0, feature=1
uhid31 at uhidev0 reportid 48: input=0, output=0, feature=2
uhid32 at uhidev0 reportid 49: input=0, output=0, feature=2
uhid33 at uhidev0 reportid 50: input=6, output=0, feature=6
uhid34 at uhidev0 reportid 57: input=0, output=0, feature=1
uhid35 at uhidev0 reportid 58: input=0, output=0, feature=1
uhid36 at uhidev0 reportid 59: input=1, output=0, feature=1
uhid37 at uhidev0 reportid 62: input=0, output=0, feature=1
uhid38 at uhidev0 reportid 64: input=0, output=0, feature=1
uhid39 at uhidev0 reportid 65: input=1, output=0, feature=1
uhid40 at uhidev0 reportid 66: input=0, output=0, feature=2
uhid41 at uhidev0 reportid 67: input=0, output=0, feature=1
uhid42 at uhidev0 reportid 68: input=0, output=0, feature=8
uhid43 at uhidev0 reportid 71: input=0, output=0, feature=2
uhid44 at uhidev0 reportid 72: input=0, output=0, feature=2
uhid45 at uhidev0 reportid 73: input=1, output=0, feature=1
uhid46 at uhidev0 reportid 74: input=0, output=0, feature=1
uhid47 at uhidev0 reportid 75: input=0, output=0, feature=1
uhid48 at uhidev0 reportid 76: input=0, output=0, feature=1
uhid49 at uhidev0 reportid 77: input=0, output=0, feature=2
uhid50 at uhidev0 reportid 78: input=0, output=0, feature=2
uhid51 at uhidev0 reportid 79: input=0, output=0, feature=1
uhid52 at uhidev0 reportid 80: input=0, output=0, feature=1
uhid53 at uhidev0 reportid 81: input=0, output=0, feature=1
uhid54 at uhidev0 reportid 82: input=0, output=0, feature=1
uhid55 at uhidev0 reportid 84: input=0, output=0, feature=4
uhid56 at uhidev0 reportid 85: input=0, output=0, feature=4
uhid57 at uhidev0 reportid 87: input=0, output=0, feature=1
uhid58 at uhidev0 reportid 88: input=0, output=0, feature=1
uhid59 at uhidev0 reportid 90: input=0, output=0, feature=4
uhid60 at uhidev0 reportid 91: input=0, output=0, feature=4
uhid61 at uhidev0 reportid 93: input=1, output=0, feature=1
uhid62 at uhidev0 reportid 100: input=0, output=0, feature=1
uhid63 at uhidev0 reportid 101: input=0, output=0, feature=1
uhid64 at uhidev0 reportid 102: input=0, output=0, feature=1
uhid65 at uhidev0 reportid 103: input=0, output=0, feature=1
uhid66 at uhidev0 reportid 113: input=0, output=0, feature=30
uhid67 at uhidev0 reportid 114: input=0, output=0, feature=2
uhid68 at uhidev0 reportid 115: input=0, output=0, feature=1
uhid69 at uhidev0 reportid 116: input=0, output=0, feature=2
uhid70 at uhidev0 reportid 117: input=0, output=0, feature=2
uhid71 at uhidev0 reportid 128: input=0, output=0, feature=1
uhid72 at uhidev0 reportid 129: input=0, output=0, feature=1
uhid73 at uhidev0 reportid 130: input=1, output=0, feature=1
uhid74 at uhidev0 reportid 131: input=0, output=0, feature=1
uhid75 at uhidev0 reportid 132: input=0, output=0, feature=1
uhid76 at uhidev0 reportid 133: input=0, output=0, feature=1
uhid77 at uhidev0 reportid 134: input=0, output=0, feature=8
uhid78 at uhidev0 reportid 135: input=0, output=0, feature=2
uhid79 at uhidev0 reportid 136: input=0, output=0, feature=2
uhid80 at uhidev0 reportid 137: input=0, output=0, feature=8
uhid81 at uhidev0 reportid 138: input=0, output=0, feature=2
uhid82 at uhidev0 reportid 139: input=0, output=0, feature=2
uhid83 at uhidev0 reportid 140: input=0, output=0, feature=8
uhid84 at uhidev0 reportid 141: input=0, output=0, feature=4
uhid85 at uhidev0 reportid 142: input=0, output=0, feature=4
uhid86 at uhidev0 reportid 144: input=0, output=0, feature=4
uhid87 at uhidev0 reportid 145: input=0, output=0, feature=4
uhid88 at uhidev0 reportid 254: input=0, output=0, feature=10
uhidev1 at uhub3 port 2 configuration 1 interface 0 "CHICONY HP Basic USB 
Keyboard" rev 1.10/3.00 addr 3
uhidev1: iclass 3/1
ukbd0 at uhidev1: 8 variable keys, 6 key codes
wskbd1 at ukbd0 mux 1
wskbd1: connecting to wsdisplay0
vscsi0 at root
scsibus2 at vscsi0: 256 targets
softraid0 at root
scsibus3 at softraid0: 256 targets
root on sd0a (46977331b83b36d7.a) swap on sd0b dump on sd0b

usbdevs:

Reply via email to