Skip to content

Instantly share code, notes, and snippets.

@hellow554
Last active August 2, 2018 13:47
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save hellow554/6b11c6c0827d5db80a7e66f71f5636ff to your computer and use it in GitHub Desktop.
Save hellow554/6b11c6c0827d5db80a7e66f71f5636ff to your computer and use it in GitHub Desktop.
Kernel Panic
[ 1125.090000] Unable to handle kernel paging request at virtual address c14fe63a
[ 1125.100000] pgd = c14d8000
[ 1125.100000] [c14fe63a] *pgd=8140041e(bad)
[ 1125.100000] Internal error: Oops: 1 [#1] PREEMPT ARM
[ 1125.100000] Modules linked in:
[ 1125.100000] CPU: 0 Not tainted (3.4.113 #1)
[ 1125.100000] PC is at udp_recvmsg+0x284/0x33c
[ 1125.100000] LR is at 0x0
[ 1125.100000] pc : [<c0228adc>] lr : [<00000000>] psr: a0000013
[ 1125.100000] sp : c1e67d10 ip : 00000000 fp : 0000004a
[ 1125.100000] r10: c1e67d34 r9 : 0000004a r8 : 00000000
[ 1125.100000] r7 : 000005c0 r6 : c1e10220 r5 : c1e67f7c r4 : c14f4640
[ 1125.100000] r3 : c14fe62e r2 : c1e67ec0 r1 : 00000008 r0 : c1e67ec8
[ 1125.100000] Flags: NzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
[ 1125.100000] Control: 0005317f Table: 814d8000 DAC: 00000015
[ 1125.100000] Process trdp.release (pid: 132, stack limit = 0xc1e66270)
[ 1125.100000] Stack: (0xc1e67d10 to 0xc1e68000)
[ 1125.100000] 7d00: c1e67d34 00004348 00000001 0000004a
[ 1125.100000] 7d20: 00000000 c1e67ec0 c1e10220 00000000 00000000 00000000 c022aea4 c1e67f7c
[ 1125.100000] 7d40: 00000000 00000000 00000000 000005c0 00000000 c1e67f7c c1e67ec0 c02306e0
[ 1125.100000] 7d60: 00000000 00000000 c1e67d74 00000000 c1e10220 00000000 c1e67d90 00000000
[ 1125.100000] 7d80: c3483000 c01d2c38 00000000 00000001 00000001 00000000 00000000 000005c0
[ 1125.100000] 7da0: c3483000 c005c5d4 00000000 c1e67f7c 00000000 c03482b8 c1e66000 c1e67ee0
[ 1125.100000] 7dc0: c1e67e4c 0001424f c0345ba0 c035fca0 c035fca8 c005c6a8 00000000 00000001
[ 1125.100000] 7de0: ffffffff 00000000 00000000 00000000 00000000 00000000 c3887700 c0022608
[ 1125.100000] 7e00: 00000000 00000000 c01e59b4 00000001 c1e67d90 00000000 00000000 beca3b78
[ 1125.100000] 7e20: 00000004 00000000 00000004 c00b05b0 c1e67e48 c1e67e4c c1e67e50 00000001
[ 1125.100000] 7e40: c1e67f7c c3483000 beca35bc c1e67e80 c1e67f7c c1e67e80 c01d2b90 c3483000
[ 1125.100000] 7e60: beca35bc 00000000 c1e67e80 c01d3fac beca35d8 00000008 beca35c0 beca359c
[ 1125.100000] 7e80: b6ab34aa 00000576 00000001 c0022128 c025ce20 c1e49a80 00000009 0001424e
[ 1125.100000] 7ea0: 40008000 c1e66008 0000001d 00000000 c1e67f14 c3887700 c1e66008 0000001d
[ 1125.100000] 7ec0: b0040002 1714010a 00000000 00000000 c00189a8 00000013 f4008000 c000dbf4
[ 1125.100000] 7ee0: 81e68000 c1e49180 00000000 00000000 c1e1e000 c003c2f8 c1e1e000 00000002
[ 1125.100000] 7f00: c036092c c0346700 00000000 00000000 ffffffff 00000000 ffffffff 00000000
[ 1125.100000] 7f20: c1e67f78 c1e66000 c1e67f78 beca3cc0 00000001 beca3cc0 00000008 beca35bc
[ 1125.100000] 7f40: 00000000 c3483000 beca35bc 00000000 00000129 c000e188 c1e66000 00000000
[ 1125.100000] 7f60: beca37e0 c01d4fbc 00000000 beca3860 beca3938 00000000 fffffff7 c1e67ec0
[ 1125.100000] 7f80: 00000000 c1e67e80 00000001 beca359c 00000020 00000000 beca359c b6ab3460
[ 1125.100000] 7fa0: 00000000 c000dfe0 beca359c b6ab3460 00000004 beca35bc 00000000 00000020
[ 1125.100000] 7fc0: beca359c b6ab3460 00000000 00000129 beca37f4 00000000 00056178 beca37e0
[ 1125.100000] 7fe0: 00000004 beca33d0 0001a904 b6f6d8dc 60000010 00000004 83ffe831 83ffec31
[ 1125.100000] [<c0228adc>] (udp_recvmsg+0x284/0x33c) from [<c02306e0>] (inet_recvmsg+0x38/0x4c)
[ 1125.100000] [<c02306e0>] (inet_recvmsg+0x38/0x4c) from [<c01d2c38>] (sock_recvmsg+0xa8/0xcc)
[ 1125.100000] [<c01d2c38>] (sock_recvmsg+0xa8/0xcc) from [<c01d3fac>] (___sys_recvmsg.part.4+0xe0/0x1bc)
[ 1125.100000] [<c01d3fac>] (___sys_recvmsg.part.4+0xe0/0x1bc) from [<c01d4fbc>] (__sys_recvmsg+0x50/0x80)
[ 1125.100000] [<c01d4fbc>] (__sys_recvmsg+0x50/0x80) from [<c000dfe0>] (ret_fast_syscall+0x0/0x2c)
[ 1125.100000] Code: e1d330b0 e3a01008 e1c230b2 e5943080 (e593300c)
[ 1125.430000] ---[ end trace f0b7642b14562089 ]---
[ 1125.440000] ------------[ cut here ]------------
[ 1125.450000] WARNING: at net/ipv4/af_inet.c:153 inet_sock_destruct+0x188/0x1a8()
[ 1125.460000] Modules linked in:
[ 1125.460000] [<c0013ac8>] (unwind_backtrace+0x0/0xec) from [<c001c588>] (warn_slowpath_common+0x4c/0x64)
[ 1125.470000] [<c001c588>] (warn_slowpath_common+0x4c/0x64) from [<c001c63c>] (warn_slowpath_null+0x1c/0x24)
[ 1125.480000] [<c001c63c>] (warn_slowpath_null+0x1c/0x24) from [<c0230888>] (inet_sock_destruct+0x188/0x1a8)
[ 1125.490000] [<c0230888>] (inet_sock_destruct+0x188/0x1a8) from [<c01d75f4>] (__sk_free+0x18/0x154)
[ 1125.500000] [<c01d75f4>] (__sk_free+0x18/0x154) from [<c0230aa0>] (inet_release+0x44/0x70)
[ 1125.510000] [<c0230aa0>] (inet_release+0x44/0x70) from [<c01d3714>] (sock_release+0x20/0xc8)
[ 1125.510000] [<c01d3714>] (sock_release+0x20/0xc8) from [<c01d37d0>] (sock_close+0x14/0x2c)
[ 1125.520000] [<c01d37d0>] (sock_close+0x14/0x2c) from [<c00a0044>] (fput+0xb4/0x27c)
[ 1125.530000] [<c00a0044>] (fput+0xb4/0x27c) from [<c009d64c>] (filp_close+0x64/0x88)
[ 1125.540000] [<c009d64c>] (filp_close+0x64/0x88) from [<c001fb28>] (put_files_struct+0x80/0xe0)
[ 1125.550000] [<c001fb28>] (put_files_struct+0x80/0xe0) from [<c0020388>] (do_exit+0x4c8/0x748)
[ 1125.560000] [<c0020388>] (do_exit+0x4c8/0x748) from [<c0011894>] (die+0x214/0x240)
[ 1125.560000] [<c0011894>] (die+0x214/0x240) from [<c0256160>] (__do_kernel_fault.part.0+0x54/0x74)
[ 1125.570000] [<c0256160>] (__do_kernel_fault.part.0+0x54/0x74) from [<c0015188>] (do_bad_area+0x88/0x8c)
[ 1125.580000] [<c0015188>] (do_bad_area+0x88/0x8c) from [<c00173dc>] (do_alignment+0xf0/0x938)
[ 1125.590000] [<c00173dc>] (do_alignment+0xf0/0x938) from [<c000862c>] (do_DataAbort+0x34/0x98)
[ 1125.600000] [<c000862c>] (do_DataAbort+0x34/0x98) from [<c000db98>] (__dabt_svc+0x38/0x60)
[ 1125.610000] Exception stack(0xc1e67cc8 to 0xc1e67d10)
[ 1125.610000] 7cc0: c1e67ec8 00000008 c1e67ec0 c14fe62e c14f4640 c1e67f7c
[ 1125.620000] 7ce0: c1e10220 000005c0 00000000 0000004a c1e67d34 0000004a 00000000 c1e67d10
[ 1125.630000] 7d00: 00000000 c0228adc a0000013 ffffffff
[ 1125.640000] [<c000db98>] (__dabt_svc+0x38/0x60) from [<c0228adc>] (udp_recvmsg+0x284/0x33c)
[ 1125.650000] [<c0228adc>] (udp_recvmsg+0x284/0x33c) from [<c02306e0>] (inet_recvmsg+0x38/0x4c)
[ 1125.650000] [<c02306e0>] (inet_recvmsg+0x38/0x4c) from [<c01d2c38>] (sock_recvmsg+0xa8/0xcc)
[ 1125.660000] [<c01d2c38>] (sock_recvmsg+0xa8/0xcc) from [<c01d3fac>] (___sys_recvmsg.part.4+0xe0/0x1bc)
[ 1125.670000] [<c01d3fac>] (___sys_recvmsg.part.4+0xe0/0x1bc) from [<c01d4fbc>] (__sys_recvmsg+0x50/0x80)
[ 1125.680000] [<c01d4fbc>] (__sys_recvmsg+0x50/0x80) from [<c000dfe0>] (ret_fast_syscall+0x0/0x2c)
[ 1125.690000] ---[ end trace f0b7642b1456208a ]---
[ 1125.700000] ------------[ cut here ]------------
[ 1125.700000] WARNING: at net/ipv4/af_inet.c:156 inet_sock_destruct+0x158/0x1a8()
[ 1125.710000] Modules linked in:
[ 1125.710000] [<c0013ac8>] (unwind_backtrace+0x0/0xec) from [<c001c588>] (warn_slowpath_common+0x4c/0x64)
[ 1125.720000] [<c001c588>] (warn_slowpath_common+0x4c/0x64) from [<c001c63c>] (warn_slowpath_null+0x1c/0x24)
[ 1125.730000] [<c001c63c>] (warn_slowpath_null+0x1c/0x24) from [<c0230858>] (inet_sock_destruct+0x158/0x1a8)
[ 1125.740000] [<c0230858>] (inet_sock_destruct+0x158/0x1a8) from [<c01d75f4>] (__sk_free+0x18/0x154)
[ 1125.750000] [<c01d75f4>] (__sk_free+0x18/0x154) from [<c0230aa0>] (inet_release+0x44/0x70)
[ 1125.760000] [<c0230aa0>] (inet_release+0x44/0x70) from [<c01d3714>] (sock_release+0x20/0xc8)
[ 1125.770000] [<c01d3714>] (sock_release+0x20/0xc8) from [<c01d37d0>] (sock_close+0x14/0x2c)
[ 1125.780000] [<c01d37d0>] (sock_close+0x14/0x2c) from [<c00a0044>] (fput+0xb4/0x27c)
[ 1125.780000] [<c00a0044>] (fput+0xb4/0x27c) from [<c009d64c>] (filp_close+0x64/0x88)
[ 1125.790000] [<c009d64c>] (filp_close+0x64/0x88) from [<c001fb28>] (put_files_struct+0x80/0xe0)
[ 1125.800000] [<c001fb28>] (put_files_struct+0x80/0xe0) from [<c0020388>] (do_exit+0x4c8/0x748)
[ 1125.810000] [<c0020388>] (do_exit+0x4c8/0x748) from [<c0011894>] (die+0x214/0x240)
[ 1125.820000] [<c0011894>] (die+0x214/0x240) from [<c0256160>] (__do_kernel_fault.part.0+0x54/0x74)
[ 1125.830000] [<c0256160>] (__do_kernel_fault.part.0+0x54/0x74) from [<c0015188>] (do_bad_area+0x88/0x8c)
[ 1125.840000] [<c0015188>] (do_bad_area+0x88/0x8c) from [<c00173dc>] (do_alignment+0xf0/0x938)
[ 1125.850000] [<c00173dc>] (do_alignment+0xf0/0x938) from [<c000862c>] (do_DataAbort+0x34/0x98)
[ 1125.850000] [<c000862c>] (do_DataAbort+0x34/0x98) from [<c000db98>] (__dabt_svc+0x38/0x60)
[ 1125.860000] Exception stack(0xc1e67cc8 to 0xc1e67d10)
[ 1125.870000] 7cc0: c1e67ec8 00000008 c1e67ec0 c14fe62e c14f4640 c1e67f7c
[ 1125.880000] 7ce0: c1e10220 000005c0 00000000 0000004a c1e67d34 0000004a 00000000 c1e67d10
[ 1125.880000] 7d00: 00000000 c0228adc a0000013 ffffffff
[ 1125.890000] [<c000db98>] (__dabt_svc+0x38/0x60) from [<c0228adc>] (udp_recvmsg+0x284/0x33c)
[ 1125.900000] [<c0228adc>] (udp_recvmsg+0x284/0x33c) from [<c02306e0>] (inet_recvmsg+0x38/0x4c)
[ 1125.910000] [<c02306e0>] (inet_recvmsg+0x38/0x4c) from [<c01d2c38>] (sock_recvmsg+0xa8/0xcc)
[ 1125.920000] [<c01d2c38>] (sock_recvmsg+0xa8/0xcc) from [<c01d3fac>] (___sys_recvmsg.part.4+0xe0/0x1bc)
[ 1125.930000] [<c01d3fac>] (___sys_recvmsg.part.4+0xe0/0x1bc) from [<c01d4fbc>] (__sys_recvmsg+0x50/0x80)
[ 1125.940000] [<c01d4fbc>] (__sys_recvmsg+0x50/0x80) from [<c000dfe0>] (ret_fast_syscall+0x0/0x2c)
[ 1125.940000] ---[ end trace f0b7642b1456208b ]---
/dts-v1/;
/include/ "lpc32xx.dtsi"
/ {
model = "m-u-t MLC3250 board based on NXP LPC3250";
compatible = "mut,mlc3250", "nxp,lpc3250";
#address-cells = <1>;
#size-cells = <1>;
memory {
device_type = "memory";
reg = <0x80000000 0x4000000>;
};
aliases {
serial0 = &uart5;
};
chosen {
bootargs = "debug console=ttyS0,115200 root=/dev/ram0 ";
};
};
&mac {
phy-mode = "rmii";
use-iram;
};
&uart4 {
status = "okay";
};
&uart5 {
status = "okay";
};
udp.o: file format elf32-littlearm
Disassembly of section .text:
c0227a30 <xfrm4_udp_encap_rcv>:
}
static inline int xfrm4_udp_encap_rcv(struct sock *sk, struct sk_buff *skb)
{
/* should not happen */
kfree_skb(skb);
c0227a30: e1a00001 mov r0, r1
{
c0227a34: e92d4008 push {r3, lr}
kfree_skb(skb);
c0227a38: ebfffffe bl 0 <kfree_skb>
c0227a38: R_ARM_CALL kfree_skb
return 0;
}
c0227a3c: e3a00000 mov r0, #0
c0227a40: e8bd8008 pop {r3, pc}
c0227a44 <udp_lib_hash>:
return csum;
}
/* hash routines shared between UDPv4/6 and UDP-Litev4/6 */
static inline void udp_lib_hash(struct sock *sk)
{
c0227a44: e7f001f2 .word 0xe7f001f2
c0227a48 <udp_lib_close>:
extern void udp_lib_unhash(struct sock *sk);
extern void udp_lib_rehash(struct sock *sk, u16 new_hash);
static inline void udp_lib_close(struct sock *sk, long timeout)
{
sk_common_release(sk);
c0227a48: eafffffe b 0 <sk_common_release>
c0227a48: R_ARM_JUMP24 sk_common_release
c0227a4c <udplite_getfrag>:
/*
* Checksum computation is all in software, hence simpler getfrag.
*/
static __inline__ int udplite_getfrag(void *from, char *to, int offset,
int len, int odd, struct sk_buff *skb)
{
c0227a4c: e1a0c000 mov ip, r0
return memcpy_fromiovecend(to, (struct iovec *) from, offset, len);
c0227a50: e1a00001 mov r0, r1
c0227a54: e1a0100c mov r1, ip
c0227a58: eafffffe b 0 <memcpy_fromiovecend>
c0227a58: R_ARM_JUMP24 memcpy_fromiovecend
c0227a5c <ipv4_rcv_saddr_equal>:
static int ipv4_rcv_saddr_equal(const struct sock *sk1, const struct sock *sk2)
{
struct inet_sock *inet1 = inet_sk(sk1), *inet2 = inet_sk(sk2);
return (!ipv6_only_sock(sk2) &&
(!inet1->inet_rcv_saddr || !inet2->inet_rcv_saddr ||
c0227a5c: e5903004 ldr r3, [r0, #4]
return (!ipv6_only_sock(sk2) &&
c0227a60: e3530000 cmp r3, #0
c0227a64: 0a000005 beq c0227a80 <ipv4_rcv_saddr_equal+0x24>
(!inet1->inet_rcv_saddr || !inet2->inet_rcv_saddr ||
c0227a68: e5910004 ldr r0, [r1, #4]
return (!ipv6_only_sock(sk2) &&
c0227a6c: e1530000 cmp r3, r0
c0227a70: 13500000 cmpne r0, #0
c0227a74: 03a00001 moveq r0, #1
c0227a78: 13a00000 movne r0, #0
c0227a7c: e12fff1e bx lr
c0227a80: e3a00001 mov r0, #1
inet1->inet_rcv_saddr == inet2->inet_rcv_saddr));
}
c0227a84: e12fff1e bx lr
c0227a88 <udp4_portaddr_hash>:
/* __jhash_nwords - hash exactly 3, 2 or 1 word(s) */
static inline u32 __jhash_nwords(u32 a, u32 b, u32 c, u32 initval)
{
a += initval;
c0227a88: e59f3040 ldr r3, [pc, #64] ; c0227ad0 <udp4_portaddr_hash+0x48>
b += initval;
c += initval;
__jhash_final(a, b, c);
c0227a8c: e59f0040 ldr r0, [pc, #64] ; c0227ad4 <udp4_portaddr_hash+0x4c>
a += initval;
c0227a90: e0811003 add r1, r1, r3
__jhash_final(a, b, c);
c0227a94: e59fc03c ldr ip, [pc, #60] ; c0227ad8 <udp4_portaddr_hash+0x50>
c0227a98: e0211000 eor r1, r1, r0
c0227a9c: e081c00c add ip, r1, ip
c0227aa0: e023300c eor r3, r3, ip
c0227aa4: e04333ec sub r3, r3, ip, ror #7
c0227aa8: e0231000 eor r1, r3, r0
c0227aac: e0411863 sub r1, r1, r3, ror #16
c0227ab0: e02cc001 eor ip, ip, r1
c0227ab4: e04c0e61 sub r0, ip, r1, ror #28
c0227ab8: e0233000 eor r3, r3, r0
c0227abc: e0433960 sub r3, r3, r0, ror #18
c0227ac0: e0211003 eor r1, r1, r3
c0227ac4: e0410463 sub r0, r1, r3, ror #8
static unsigned int udp4_portaddr_hash(struct net *net, __be32 saddr,
unsigned int port)
{
return jhash_1word((__force u32)saddr, net_hash_mix(net)) ^ port;
}
c0227ac8: e0200002 eor r0, r0, r2
c0227acc: e12fff1e bx lr
c0227ad0: deadbef3 .word 0xdeadbef3
c0227ad4: 90430855 .word 0x90430855
c0227ad8: e7bd537e .word 0xe7bd537e
c0227adc <udp_lib_rehash>:
/*
* inet_rcv_saddr was changed, we must rehash secondary hash
*/
void udp_lib_rehash(struct sock *sk, u16 newhash)
{
c0227adc: e92d43f8 push {r3, r4, r5, r6, r7, r8, r9, lr}
if (sk_hashed(sk)) {
c0227ae0: e5903024 ldr r3, [r0, #36] ; 0x24
{
c0227ae4: e1a04000 mov r4, r0
if (sk_hashed(sk)) {
c0227ae8: e3530000 cmp r3, #0
c0227aec: 08bd83f8 popeq {r3, r4, r5, r6, r7, r8, r9, pc}
struct udp_table *udptable = sk->sk_prot->h.udp_table;
c0227af0: e590301c ldr r3, [r0, #28]
struct udp_hslot *hslot, *hslot2, *nhslot2;
hslot2 = udp_hashslot2(udptable, udp_sk(sk)->udp_portaddr_hash);
c0227af4: e1d050ba ldrh r5, [r0, #10]
struct udp_table *udptable = sk->sk_prot->h.udp_table;
c0227af8: e5933090 ldr r3, [r3, #144] ; 0x90
return &table->hash2[hash & table->mask];
c0227afc: e5937008 ldr r7, [r3, #8]
c0227b00: e5938004 ldr r8, [r3, #4]
c0227b04: e0055007 and r5, r5, r7
c0227b08: e0077001 and r7, r7, r1
c0227b0c: e0885185 add r5, r8, r5, lsl #3
c0227b10: e0889187 add r9, r8, r7, lsl #3
nhslot2 = udp_hashslot2(udptable, newhash);
udp_sk(sk)->udp_portaddr_hash = newhash;
if (hslot2 != nhslot2) {
c0227b14: e1550009 cmp r5, r9
udp_sk(sk)->udp_portaddr_hash = newhash;
c0227b18: e1c010ba strh r1, [r0, #10]
if (hslot2 != nhslot2) {
c0227b1c: 08bd83f8 popeq {r3, r4, r5, r6, r7, r8, r9, pc}
static inline struct thread_info *current_thread_info(void) __attribute_const__;
static inline struct thread_info *current_thread_info(void)
{
register unsigned long sp asm ("sp");
return (struct thread_info *)(sp & ~(THREAD_SIZE - 1));
c0227b20: e1a0300d mov r3, sp
c0227b24: e3c36d7f bic r6, r3, #8128 ; 0x1fc0
raw_spin_lock(&lock->rlock);
}
static inline void spin_lock_bh(spinlock_t *lock)
{
raw_spin_lock_bh(&lock->rlock);
c0227b28: ebfffffe bl 0 <local_bh_disable>
c0227b28: R_ARM_CALL local_bh_disable
c0227b2c: e3c6303f bic r3, r6, #63 ; 0x3f
c0227b30: e5932004 ldr r2, [r3, #4]
c0227b34: e2822001 add r2, r2, #1
c0227b38: e5832004 str r2, [r3, #4]
raw_spin_lock(&lock->rlock);
c0227b3c: e5932004 ldr r2, [r3, #4]
c0227b40: e2822001 add r2, r2, #1
c0227b44: e5832004 str r2, [r3, #4]
return ((unsigned long)ptr) >> 1;
}
static inline int hlist_nulls_unhashed(const struct hlist_nulls_node *h)
{
return !h->pprev;
c0227b48: e5943018 ldr r3, [r4, #24]
* perfectly legal to run concurrently with the _rcu list-traversal
* primitives, such as hlist_nulls_for_each_entry_rcu().
*/
static inline void hlist_nulls_del_init_rcu(struct hlist_nulls_node *n)
{
if (!hlist_nulls_unhashed(n)) {
c0227b4c: e3530000 cmp r3, #0
c0227b50: 0a000005 beq c0227b6c <udp_lib_rehash+0x90>
first->pprev = &n->next;
}
static inline void __hlist_nulls_del(struct hlist_nulls_node *n)
{
struct hlist_nulls_node *next = n->next;
c0227b54: e5942014 ldr r2, [r4, #20]
struct hlist_nulls_node **pprev = n->pprev;
*pprev = next;
if (!is_a_nulls(next))
c0227b58: e3120001 tst r2, #1
*pprev = next;
c0227b5c: e5832000 str r2, [r3]
next->pprev = pprev;
c0227b60: 05823004 streq r3, [r2, #4]
__hlist_nulls_del(n);
n->pprev = NULL;
c0227b64: e3a03000 mov r3, #0
c0227b68: e5843018 str r3, [r4, #24]
/* we must lock primary chain too */
spin_lock_bh(&hslot->lock);
spin_lock(&hslot2->lock);
hlist_nulls_del_init_rcu(&udp_sk(sk)->udp_portaddr_node);
hslot2->count--;
c0227b6c: e5953004 ldr r3, [r5, #4]
c0227b70: e2433001 sub r3, r3, #1
c0227b74: e5853004 str r3, [r5, #4]
c0227b78: e3c6303f bic r3, r6, #63 ; 0x3f
raw_spin_lock_irqsave_nested(spinlock_check(lock), flags, subclass); \
} while (0)
static inline void spin_unlock(spinlock_t *lock)
{
raw_spin_unlock(&lock->rlock);
c0227b7c: e5932004 ldr r2, [r3, #4]
c0227b80: e2422001 sub r2, r2, #1
c0227b84: e5832004 str r2, [r3, #4]
* @nr: bit number to test
* @addr: Address to start counting from
*/
static inline int test_bit(int nr, const volatile unsigned long *addr)
{
return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
c0227b88: e5933000 ldr r3, [r3]
c0227b8c: e3130002 tst r3, #2
c0227b90: 1a00001a bne c0227c00 <udp_lib_rehash+0x124>
c0227b94: e3c6203f bic r2, r6, #63 ; 0x3f
raw_spin_lock(&lock->rlock);
c0227b98: e5923004 ldr r3, [r2, #4]
c0227b9c: e2833001 add r3, r3, #1
c0227ba0: e5823004 str r3, [r2, #4]
* list-traversal primitive must be guarded by rcu_read_lock().
*/
static inline void hlist_nulls_add_head_rcu(struct hlist_nulls_node *n,
struct hlist_nulls_head *h)
{
struct hlist_nulls_node *first = h->first;
c0227ba4: e7983187 ldr r3, [r8, r7, lsl #3]
spin_unlock(&hslot2->lock);
spin_lock(&nhslot2->lock);
hlist_nulls_add_head_rcu(&udp_sk(sk)->udp_portaddr_node,
c0227ba8: e2842014 add r2, r4, #20
n->next = first;
c0227bac: e5843014 str r3, [r4, #20]
n->pprev = &h->first;
c0227bb0: e5849018 str r9, [r4, #24]
rcu_assign_pointer(hlist_nulls_first_rcu(h), n);
if (!is_a_nulls(first))
c0227bb4: e3130001 tst r3, #1
rcu_assign_pointer(hlist_nulls_first_rcu(h), n);
c0227bb8: e7882187 str r2, [r8, r7, lsl #3]
first->pprev = &n->next;
c0227bbc: 05832004 streq r2, [r3, #4]
&nhslot2->head);
nhslot2->count++;
c0227bc0: e5993004 ldr r3, [r9, #4]
c0227bc4: e2833001 add r3, r3, #1
c0227bc8: e5893004 str r3, [r9, #4]
c0227bcc: e3c6303f bic r3, r6, #63 ; 0x3f
raw_spin_unlock(&lock->rlock);
c0227bd0: e5932004 ldr r2, [r3, #4]
c0227bd4: e2422001 sub r2, r2, #1
c0227bd8: e5832004 str r2, [r3, #4]
c0227bdc: e5933000 ldr r3, [r3]
c0227be0: e3130002 tst r3, #2
c0227be4: 1a000007 bne c0227c08 <udp_lib_rehash+0x12c>
c0227be8: e3c6303f bic r3, r6, #63 ; 0x3f
}
static inline void spin_unlock_bh(spinlock_t *lock)
{
raw_spin_unlock_bh(&lock->rlock);
c0227bec: e5932004 ldr r2, [r3, #4]
c0227bf0: e2422001 sub r2, r2, #1
c0227bf4: e5832004 str r2, [r3, #4]
spin_unlock(&nhslot2->lock);
spin_unlock_bh(&hslot->lock);
}
}
}
c0227bf8: e8bd43f8 pop {r3, r4, r5, r6, r7, r8, r9, lr}
c0227bfc: eafffffe b 0 <local_bh_enable>
c0227bfc: R_ARM_JUMP24 local_bh_enable
raw_spin_unlock(&lock->rlock);
c0227c00: ebfffffe bl 0 <preempt_schedule>
c0227c00: R_ARM_CALL preempt_schedule
c0227c04: eaffffe2 b c0227b94 <udp_lib_rehash+0xb8>
c0227c08: ebfffffe bl 0 <preempt_schedule>
c0227c08: R_ARM_CALL preempt_schedule
c0227c0c: eafffff5 b c0227be8 <udp_lib_rehash+0x10c>
c0227c10 <udp_v4_rehash>:
EXPORT_SYMBOL(udp_lib_rehash);
static void udp_v4_rehash(struct sock *sk)
{
c0227c10: e92d4010 push {r4, lr}
u16 new_hash = udp4_portaddr_hash(sock_net(sk),
inet_sk(sk)->inet_rcv_saddr,
inet_sk(sk)->inet_num);
c0227c14: e2803f56 add r3, r0, #344 ; 0x158
{
c0227c18: e1a04000 mov r4, r0
u16 new_hash = udp4_portaddr_hash(sock_net(sk),
c0227c1c: e5901004 ldr r1, [r0, #4]
c0227c20: e1d320b2 ldrh r2, [r3, #2]
c0227c24: e59f0014 ldr r0, [pc, #20] ; c0227c40 <udp_v4_rehash+0x30>
c0227c28: ebffff96 bl c0227a88 <udp4_portaddr_hash>
udp_lib_rehash(sk, new_hash);
c0227c2c: e1a01800 lsl r1, r0, #16
c0227c30: e1a01821 lsr r1, r1, #16
c0227c34: e1a00004 mov r0, r4
}
c0227c38: e8bd4010 pop {r4, lr}
udp_lib_rehash(sk, new_hash);
c0227c3c: eafffffe b c0227adc <udp_lib_rehash>
c0227c3c: R_ARM_JUMP24 udp_lib_rehash
c0227c40: 00000000 .word 0x00000000
c0227c40: R_ARM_ABS32 init_net
c0227c44 <udp_get_first>:
/* ------------------------------------------------------------------------ */
#ifdef CONFIG_PROC_FS
static struct sock *udp_get_first(struct seq_file *seq, int start)
{
c0227c44: e92d40f8 push {r3, r4, r5, r6, r7, lr}
struct sock *sk;
struct udp_iter_state *state = seq->private;
c0227c48: e590503c ldr r5, [r0, #60] ; 0x3c
struct net *net = seq_file_net(seq);
for (state->bucket = start; state->bucket <= state->udp_table->mask;
c0227c4c: e1a04001 mov r4, r1
c0227c50: e5952008 ldr r2, [r5, #8]
c0227c54: e5851004 str r1, [r5, #4]
c0227c58: e5923008 ldr r3, [r2, #8]
c0227c5c: e1510003 cmp r1, r3
c0227c60: 91a0300d movls r3, sp
c0227c64: 93c37d7f bicls r7, r3, #8128 ; 0x1fc0
c0227c68: 93c7703f bicls r7, r7, #63 ; 0x3f
c0227c6c: 9a000007 bls c0227c90 <udp_get_first+0x4c>
c0227c70: ea000024 b c0227d08 <udp_get_first+0xc4>
++state->bucket) {
c0227c74: e5953004 ldr r3, [r5, #4]
c0227c78: e2833001 add r3, r3, #1
for (state->bucket = start; state->bucket <= state->udp_table->mask;
c0227c7c: e1a04003 mov r4, r3
++state->bucket) {
c0227c80: e5853004 str r3, [r5, #4]
for (state->bucket = start; state->bucket <= state->udp_table->mask;
c0227c84: e5923008 ldr r3, [r2, #8]
c0227c88: e1540003 cmp r4, r3
c0227c8c: 8a00001d bhi c0227d08 <udp_get_first+0xc4>
struct hlist_nulls_node *node;
struct udp_hslot *hslot = &state->udp_table->hash[state->bucket];
c0227c90: e5926000 ldr r6, [r2]
return ((unsigned long)ptr & 1);
c0227c94: e7963184 ldr r3, [r6, r4, lsl #3]
if (hlist_nulls_empty(&hslot->head))
c0227c98: e3130001 tst r3, #1
c0227c9c: 1afffff4 bne c0227c74 <udp_get_first+0x30>
raw_spin_lock_bh(&lock->rlock);
c0227ca0: ebfffffe bl 0 <local_bh_disable>
c0227ca0: R_ARM_CALL local_bh_disable
c0227ca4: e5973004 ldr r3, [r7, #4]
c0227ca8: e2833001 add r3, r3, #1
c0227cac: e5873004 str r3, [r7, #4]
continue;
spin_lock_bh(&hslot->lock);
sk_nulls_for_each(sk, node, &hslot->head) {
c0227cb0: e7960184 ldr r0, [r6, r4, lsl #3]
c0227cb4: e3100001 tst r0, #1
c0227cb8: 1a00000a bne c0227ce8 <udp_get_first+0xa4>
if (!net_eq(sock_net(sk), net))
continue;
if (sk->sk_family == state->family)
c0227cbc: e1d520b0 ldrh r2, [r5]
c0227cc0: e15031b4 ldrh r3, [r0, #-20] ; 0xffffffec
c0227cc4: e1530002 cmp r3, r2
c0227cc8: 1a000003 bne c0227cdc <udp_get_first+0x98>
c0227ccc: ea00000b b c0227d00 <udp_get_first+0xbc>
c0227cd0: e15031b4 ldrh r3, [r0, #-20] ; 0xffffffec
c0227cd4: e1530002 cmp r3, r2
c0227cd8: 0a000008 beq c0227d00 <udp_get_first+0xbc>
sk_nulls_for_each(sk, node, &hslot->head) {
c0227cdc: e5900000 ldr r0, [r0]
c0227ce0: e3100001 tst r0, #1
c0227ce4: 0afffff9 beq c0227cd0 <udp_get_first+0x8c>
raw_spin_unlock_bh(&lock->rlock);
c0227ce8: e5973004 ldr r3, [r7, #4]
c0227cec: e2433001 sub r3, r3, #1
c0227cf0: e5873004 str r3, [r7, #4]
c0227cf4: ebfffffe bl 0 <local_bh_enable>
c0227cf4: R_ARM_CALL local_bh_enable
c0227cf8: e5952008 ldr r2, [r5, #8]
c0227cfc: eaffffdc b c0227c74 <udp_get_first+0x30>
c0227d00: e2400020 sub r0, r0, #32
c0227d04: e8bd80f8 pop {r3, r4, r5, r6, r7, pc}
goto found;
}
spin_unlock_bh(&hslot->lock);
}
sk = NULL;
c0227d08: e3a00000 mov r0, #0
c0227d0c: e8bd80f8 pop {r3, r4, r5, r6, r7, pc}
c0227d10 <udp_get_next>:
found:
return sk;
}
static struct sock *udp_get_next(struct seq_file *seq, struct sock *sk)
{
c0227d10: e92d4010 push {r4, lr}
c0227d14: e24dd008 sub sp, sp, #8
struct udp_iter_state *state = seq->private;
c0227d18: e590403c ldr r4, [r0, #60] ; 0x3c
c0227d1c: ea000005 b c0227d38 <udp_get_next+0x28>
struct net *net = seq_file_net(seq);
do {
sk = sk_nulls_next(sk);
} while (sk && (!net_eq(sock_net(sk), net) || sk->sk_family != state->family));
c0227d20: e2531020 subs r1, r3, #32
c0227d24: 0a000006 beq c0227d44 <udp_get_next+0x34>
c0227d28: e15321b4 ldrh r2, [r3, #-20] ; 0xffffffec
c0227d2c: e1d430b0 ldrh r3, [r4]
c0227d30: e1520003 cmp r2, r3
c0227d34: 0a00000a beq c0227d64 <udp_get_next+0x54>
hlist_entry(sk->sk_node.next, struct sock, sk_node) : NULL;
}
static inline struct sock *sk_nulls_next(const struct sock *sk)
{
return (!is_a_nulls(sk->sk_nulls_node.next)) ?
c0227d38: e5913020 ldr r3, [r1, #32]
hlist_nulls_entry(sk->sk_nulls_node.next,
struct sock, sk_nulls_node) :
c0227d3c: e3130001 tst r3, #1
c0227d40: 0afffff6 beq c0227d20 <udp_get_next+0x10>
if (!sk) {
if (state->bucket <= state->udp_table->mask)
c0227d44: e994000a ldmib r4, {r1, r3}
c0227d48: e5933008 ldr r3, [r3, #8]
c0227d4c: e1510003 cmp r1, r3
c0227d50: 9a000006 bls c0227d70 <udp_get_next+0x60>
spin_unlock_bh(&state->udp_table->hash[state->bucket].lock);
return udp_get_first(seq, state->bucket + 1);
c0227d54: e2811001 add r1, r1, #1
}
return sk;
}
c0227d58: e28dd008 add sp, sp, #8
c0227d5c: e8bd4010 pop {r4, lr}
return udp_get_first(seq, state->bucket + 1);
c0227d60: eaffffb7 b c0227c44 <udp_get_first>
}
c0227d64: e1a00001 mov r0, r1
c0227d68: e28dd008 add sp, sp, #8
c0227d6c: e8bd8010 pop {r4, pc}
c0227d70: e58d0004 str r0, [sp, #4]
c0227d74: e1a0300d mov r3, sp
c0227d78: e3c33d7f bic r3, r3, #8128 ; 0x1fc0
c0227d7c: e3c3303f bic r3, r3, #63 ; 0x3f
c0227d80: e5932004 ldr r2, [r3, #4]
c0227d84: e2422001 sub r2, r2, #1
c0227d88: e5832004 str r2, [r3, #4]
c0227d8c: ebfffffe bl 0 <local_bh_enable>
c0227d8c: R_ARM_CALL local_bh_enable
c0227d90: e5941004 ldr r1, [r4, #4]
c0227d94: e59d0004 ldr r0, [sp, #4]
c0227d98: eaffffed b c0227d54 <udp_get_next+0x44>
c0227d9c <udp_get_idx>:
static struct sock *udp_get_idx(struct seq_file *seq, loff_t pos)
{
c0227d9c: e92d4070 push {r4, r5, r6, lr}
struct sock *sk = udp_get_first(seq, 0);
c0227da0: e3a01000 mov r1, #0
{
c0227da4: e1a04002 mov r4, r2
c0227da8: e1a05003 mov r5, r3
c0227dac: e1a06000 mov r6, r0
struct sock *sk = udp_get_first(seq, 0);
c0227db0: ebffffa3 bl c0227c44 <udp_get_first>
if (sk)
c0227db4: e2501000 subs r1, r0, #0
c0227db8: 1a000006 bne c0227dd8 <udp_get_idx+0x3c>
c0227dbc: ea000009 b c0227de8 <udp_get_idx+0x4c>
while (pos && (sk = udp_get_next(seq, sk)) != NULL)
c0227dc0: e1a00006 mov r0, r6
c0227dc4: ebffffd1 bl c0227d10 <udp_get_next>
c0227dc8: e2501000 subs r1, r0, #0
c0227dcc: 0a000005 beq c0227de8 <udp_get_idx+0x4c>
--pos;
c0227dd0: e2544001 subs r4, r4, #1
c0227dd4: e2c55000 sbc r5, r5, #0
while (pos && (sk = udp_get_next(seq, sk)) != NULL)
c0227dd8: e1943005 orrs r3, r4, r5
c0227ddc: 1afffff7 bne c0227dc0 <udp_get_idx+0x24>
{
c0227de0: e1a00001 mov r0, r1
return pos ? NULL : sk;
}
c0227de4: e8bd8070 pop {r4, r5, r6, pc}
return pos ? NULL : sk;
c0227de8: e3a00000 mov r0, #0
c0227dec: e8bd8070 pop {r4, r5, r6, pc}
c0227df0 <udp_seq_start>:
static void *udp_seq_start(struct seq_file *seq, loff_t *pos)
{
struct udp_iter_state *state = seq->private;
state->bucket = MAX_UDP_PORTS;
c0227df0: e3a02801 mov r2, #65536 ; 0x10000
struct udp_iter_state *state = seq->private;
c0227df4: e590303c ldr r3, [r0, #60] ; 0x3c
state->bucket = MAX_UDP_PORTS;
c0227df8: e5832004 str r2, [r3, #4]
return *pos ? udp_get_idx(seq, *pos-1) : SEQ_START_TOKEN;
c0227dfc: e1c120d0 ldrd r2, [r1]
c0227e00: e1921003 orrs r1, r2, r3
c0227e04: 1a000001 bne c0227e10 <udp_seq_start+0x20>
}
c0227e08: e3a00001 mov r0, #1
c0227e0c: e12fff1e bx lr
return *pos ? udp_get_idx(seq, *pos-1) : SEQ_START_TOKEN;
c0227e10: e2522001 subs r2, r2, #1
c0227e14: e2c33000 sbc r3, r3, #0
c0227e18: eaffffdf b c0227d9c <udp_get_idx>
c0227e1c <udp_seq_next>:
static void *udp_seq_next(struct seq_file *seq, void *v, loff_t *pos)
{
struct sock *sk;
if (v == SEQ_START_TOKEN)
c0227e1c: e3510001 cmp r1, #1
{
c0227e20: e92d4070 push {r4, r5, r6, lr}
c0227e24: e1a06002 mov r6, r2
if (v == SEQ_START_TOKEN)
c0227e28: 0a000005 beq c0227e44 <udp_seq_next+0x28>
sk = udp_get_idx(seq, 0);
else
sk = udp_get_next(seq, v);
c0227e2c: ebffffb7 bl c0227d10 <udp_get_next>
++*pos;
c0227e30: e1c640d0 ldrd r4, [r6]
c0227e34: e2944001 adds r4, r4, #1
c0227e38: e2a55000 adc r5, r5, #0
c0227e3c: e1c640f0 strd r4, [r6]
return sk;
}
c0227e40: e8bd8070 pop {r4, r5, r6, pc}
sk = udp_get_idx(seq, 0);
c0227e44: e3a02000 mov r2, #0
c0227e48: e3a03000 mov r3, #0
c0227e4c: ebffffd2 bl c0227d9c <udp_get_idx>
c0227e50: eafffff6 b c0227e30 <udp_seq_next+0x14>
c0227e54 <udp4_lib_lookup2>:
{
c0227e54: e92d43f0 push {r4, r5, r6, r7, r8, r9, lr}
c0227e58: e24dd014 sub sp, sp, #20
c0227e5c: e59d5030 ldr r5, [sp, #48] ; 0x30
c0227e60: e59d6038 ldr r6, [sp, #56] ; 0x38
udp_portaddr_for_each_entry_rcu(sk, node, &hslot2->head) {
c0227e64: e596c000 ldr ip, [r6]
c0227e68: e21c8001 ands r8, ip, #1
c0227e6c: 03e07000 mvneq r7, #0
c0227e70: 0a000007 beq c0227e94 <udp4_lib_lookup2+0x40>
c0227e74: ea00004b b c0227fa8 <udp4_lib_lookup2+0x154>
return -1;
c0227e78: e3e0e000 mvn lr, #0
if (score > badness) {
c0227e7c: e15e0007 cmp lr, r7
c0227e80: c1a0700e movgt r7, lr
udp_portaddr_for_each_entry_rcu(sk, node, &hslot2->head) {
c0227e84: c1a08000 movgt r8, r0
c0227e88: e59cc000 ldr ip, [ip]
c0227e8c: e31c0001 tst ip, #1
c0227e90: 1a000027 bne c0227f34 <udp4_lib_lookup2+0xe0>
if (inet->inet_rcv_saddr != daddr)
c0227e94: e51ce010 ldr lr, [ip, #-16]
udp_portaddr_for_each_entry_rcu(sk, node, &hslot2->head) {
c0227e98: e24c0014 sub r0, ip, #20
if (inet->inet_rcv_saddr != daddr)
c0227e9c: e153000e cmp r3, lr
c0227ea0: 1afffff4 bne c0227e78 <udp4_lib_lookup2+0x24>
if (inet->inet_num != hnum)
c0227ea4: e28c4f51 add r4, ip, #324 ; 0x144
c0227ea8: e1d4e0b2 ldrh lr, [r4, #2]
c0227eac: e155000e cmp r5, lr
c0227eb0: 1afffff0 bne c0227e78 <udp4_lib_lookup2+0x24>
score = (sk->sk_family == PF_INET ? 1 : 0);
c0227eb4: e15ce0b8 ldrh lr, [ip, #-8]
if (inet->inet_daddr) {
c0227eb8: e51c9014 ldr r9, [ip, #-20] ; 0xffffffec
score = (sk->sk_family == PF_INET ? 1 : 0);
c0227ebc: e24ee002 sub lr, lr, #2
c0227ec0: e16fef1e clz lr, lr
if (inet->inet_daddr) {
c0227ec4: e3590000 cmp r9, #0
score = (sk->sk_family == PF_INET ? 1 : 0);
c0227ec8: e1a0e2ae lsr lr, lr, #5
if (inet->inet_daddr) {
c0227ecc: 0a000002 beq c0227edc <udp4_lib_lookup2+0x88>
if (inet->inet_daddr != saddr)
c0227ed0: e1510009 cmp r1, r9
c0227ed4: 1affffe7 bne c0227e78 <udp4_lib_lookup2+0x24>
score += 2;
c0227ed8: e28ee002 add lr, lr, #2
if (inet->inet_dport) {
c0227edc: e1d440b0 ldrh r4, [r4]
c0227ee0: e3540000 cmp r4, #0
c0227ee4: 0a000002 beq c0227ef4 <udp4_lib_lookup2+0xa0>
if (inet->inet_dport != sport)
c0227ee8: e1520004 cmp r2, r4
c0227eec: 1affffe1 bne c0227e78 <udp4_lib_lookup2+0x24>
score += 2;
c0227ef0: e28ee002 add lr, lr, #2
if (sk->sk_bound_dev_if) {
c0227ef4: e51c4004 ldr r4, [ip, #-4]
c0227ef8: e3540000 cmp r4, #0
c0227efc: 0affffde beq c0227e7c <udp4_lib_lookup2+0x28>
if (sk->sk_bound_dev_if != dif)
c0227f00: e59d9034 ldr r9, [sp, #52] ; 0x34
c0227f04: e1590004 cmp r9, r4
c0227f08: 1affffda bne c0227e78 <udp4_lib_lookup2+0x24>
score += 2;
c0227f0c: e28e4002 add r4, lr, #2
if (score > badness) {
c0227f10: e1540007 cmp r4, r7
c0227f14: daffffdb ble c0227e88 <udp4_lib_lookup2+0x34>
if (score == SCORE2_MAX)
c0227f18: e3540007 cmp r4, #7
c0227f1c: 0a00000b beq c0227f50 <udp4_lib_lookup2+0xfc>
udp_portaddr_for_each_entry_rcu(sk, node, &hslot2->head) {
c0227f20: e59cc000 ldr ip, [ip]
c0227f24: e1a07004 mov r7, r4
c0227f28: e31c0001 tst ip, #1
c0227f2c: e1a08000 mov r8, r0
c0227f30: 0affffd7 beq c0227e94 <udp4_lib_lookup2+0x40>
if (get_nulls_value(node) != slot2)
c0227f34: e59d003c ldr r0, [sp, #60] ; 0x3c
c0227f38: e1a04007 mov r4, r7
c0227f3c: e15000ac cmp r0, ip, lsr #1
c0227f40: e1a00008 mov r0, r8
c0227f44: 1affffc6 bne c0227e64 <udp4_lib_lookup2+0x10>
if (result) {
c0227f48: e3580000 cmp r8, #0
c0227f4c: 0a000018 beq c0227fb4 <udp4_lib_lookup2+0x160>
c0227f50: e3a0e002 mov lr, #2
c0227f54: ea000001 b c0227f60 <udp4_lib_lookup2+0x10c>
do {
val = atomic_cmpxchg(v, c, c + 1);
if (val == c)
return 1;
c = val;
} while (c);
c0227f58: e25ce000 subs lr, ip, #0
c0227f5c: 0a000014 beq c0227fb4 <udp4_lib_lookup2+0x160>
val = atomic_cmpxchg(v, c, c + 1);
c0227f60: e28e8001 add r8, lr, #1
*/
static inline unsigned long arch_local_irq_save(void)
{
unsigned long flags, temp;
asm volatile(
c0227f64: e10f7000 mrs r7, CPSR
c0227f68: e387c080 orr ip, r7, #128 ; 0x80
c0227f6c: e121f00c msr CPSR_c, ip
{
int ret;
unsigned long flags;
raw_local_irq_save(flags);
ret = v->counter;
c0227f70: e590c02c ldr ip, [r0, #44] ; 0x2c
if (likely(ret == old))
c0227f74: e15e000c cmp lr, ip
v->counter = new;
c0227f78: 0580802c streq r8, [r0, #44] ; 0x2c
/*
* restore saved IRQ & FIQ state
*/
static inline void arch_local_irq_restore(unsigned long flags)
{
asm volatile(
c0227f7c: e121f007 msr CPSR_c, r7
if (val == c)
c0227f80: e15e000c cmp lr, ip
c0227f84: 1afffff3 bne c0227f58 <udp4_lib_lookup2+0x104>
if (inet->inet_rcv_saddr != daddr)
c0227f88: e590c004 ldr ip, [r0, #4]
c0227f8c: e153000c cmp r3, ip
c0227f90: 0a00000a beq c0227fc0 <udp4_lib_lookup2+0x16c>
return -1;
c0227f94: e3e0c000 mvn ip, #0
else if (unlikely(compute_score2(result, net, saddr, sport,
c0227f98: e154000c cmp r4, ip
c0227f9c: ca000023 bgt c0228030 <udp4_lib_lookup2+0x1dc>
}
c0227fa0: e28dd014 add sp, sp, #20
c0227fa4: e8bd83f0 pop {r4, r5, r6, r7, r8, r9, pc}
if (get_nulls_value(node) != slot2)
c0227fa8: e59d003c ldr r0, [sp, #60] ; 0x3c
c0227fac: e15000ac cmp r0, ip, lsr #1
c0227fb0: 1affffab bne c0227e64 <udp4_lib_lookup2+0x10>
return -1;
c0227fb4: e3a00000 mov r0, #0
}
c0227fb8: e28dd014 add sp, sp, #20
c0227fbc: e8bd83f0 pop {r4, r5, r6, r7, r8, r9, pc}
if (inet->inet_num != hnum)
c0227fc0: e280ef56 add lr, r0, #344 ; 0x158
c0227fc4: e1dec0b2 ldrh ip, [lr, #2]
c0227fc8: e155000c cmp r5, ip
c0227fcc: 1afffff0 bne c0227f94 <udp4_lib_lookup2+0x140>
score = (sk->sk_family == PF_INET ? 1 : 0);
c0227fd0: e1d0c0bc ldrh ip, [r0, #12]
if (inet->inet_daddr) {
c0227fd4: e5907000 ldr r7, [r0]
score = (sk->sk_family == PF_INET ? 1 : 0);
c0227fd8: e24cc002 sub ip, ip, #2
c0227fdc: e16fcf1c clz ip, ip
if (inet->inet_daddr) {
c0227fe0: e3570000 cmp r7, #0
score = (sk->sk_family == PF_INET ? 1 : 0);
c0227fe4: e1a0c2ac lsr ip, ip, #5
if (inet->inet_daddr) {
c0227fe8: 0a000002 beq c0227ff8 <udp4_lib_lookup2+0x1a4>
if (inet->inet_daddr != saddr)
c0227fec: e1510007 cmp r1, r7
c0227ff0: 1affffe7 bne c0227f94 <udp4_lib_lookup2+0x140>
score += 2;
c0227ff4: e28cc002 add ip, ip, #2
if (inet->inet_dport) {
c0227ff8: e1dee0b0 ldrh lr, [lr]
c0227ffc: e35e0000 cmp lr, #0
c0228000: 0a000002 beq c0228010 <udp4_lib_lookup2+0x1bc>
if (inet->inet_dport != sport)
c0228004: e152000e cmp r2, lr
c0228008: 1affffe1 bne c0227f94 <udp4_lib_lookup2+0x140>
score += 2;
c022800c: e28cc002 add ip, ip, #2
if (sk->sk_bound_dev_if) {
c0228010: e590e010 ldr lr, [r0, #16]
c0228014: e35e0000 cmp lr, #0
c0228018: 0affffde beq c0227f98 <udp4_lib_lookup2+0x144>
if (sk->sk_bound_dev_if != dif)
c022801c: e59d7034 ldr r7, [sp, #52] ; 0x34
c0228020: e157000e cmp r7, lr
score += 2;
c0228024: 028cc002 addeq ip, ip, #2
if (sk->sk_bound_dev_if != dif)
c0228028: 1affffd9 bne c0227f94 <udp4_lib_lookup2+0x140>
c022802c: eaffffd9 b c0227f98 <udp4_lib_lookup2+0x144>
asm volatile(
c0228030: e10fe000 mrs lr, CPSR
c0228034: e38ec080 orr ip, lr, #128 ; 0x80
c0228038: e121f00c msr CPSR_c, ip
val = v->counter;
c022803c: e590c02c ldr ip, [r0, #44] ; 0x2c
v->counter = val -= i;
c0228040: e24cc001 sub ip, ip, #1
c0228044: e580c02c str ip, [r0, #44] ; 0x2c
asm volatile(
c0228048: e121f00e msr CPSR_c, lr
*/
/* Ungrab socket and destroy it, if it was the last reference. */
static inline void sock_put(struct sock *sk)
{
if (atomic_dec_and_test(&sk->sk_refcnt))
c022804c: e35c0000 cmp ip, #0
c0228050: 1affff83 bne c0227e64 <udp4_lib_lookup2+0x10>
c0228054: e98d000e stmib sp, {r1, r2, r3}
sk_free(sk);
c0228058: ebfffffe bl 0 <sk_free>
c0228058: R_ARM_CALL sk_free
c022805c: e99d000e ldmib sp, {r1, r2, r3}
c0228060: eaffff7f b c0227e64 <udp4_lib_lookup2+0x10>
c0228064 <udp_send_skb>:
{
c0228064: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr}
c0228068: e1a04000 mov r4, r0
c022806c: e1a07001 mov r7, r1
uh->check = 0;
c0228070: e3a01000 mov r1, #0
struct sock *sk = skb->sk;
c0228074: e5906010 ldr r6, [r0, #16]
#else /* NET_SKBUFF_DATA_USES_OFFSET */
static inline unsigned char *skb_transport_header(const struct sk_buff *skb)
{
return skb->transport_header;
c0228078: e590507c ldr r5, [r0, #124] ; 0x7c
return skb->csum_start - skb_headroom(skb);
}
static inline int skb_transport_offset(const struct sk_buff *skb)
{
return skb_transport_header(skb) - skb->data;
c022807c: e5903094 ldr r3, [r0, #148] ; 0x94
int len = skb->len - offset;
c0228080: e594204c ldr r2, [r4, #76] ; 0x4c
uh->source = inet->inet_sport;
c0228084: e2860f59 add r0, r6, #356 ; 0x164
c0228088: e1d000b0 ldrh r0, [r0]
c022808c: e0633005 rsb r3, r3, r5
int len = skb->len - offset;
c0228090: e0633002 rsb r3, r3, r2
int is_udplite = IS_UDPLITE(sk);
c0228094: e5d681f8 ldrb r8, [r6, #504] ; 0x1f8
uh->len = htons(len);
c0228098: e1a03803 lsl r3, r3, #16
uh->source = inet->inet_sport;
c022809c: e1c500b0 strh r0, [r5]
uh->dest = fl4->fl4_dport;
c02280a0: e1d721bc ldrh r2, [r7, #28]
uh->len = htons(len);
c02280a4: e1a09823 lsr r9, r3, #16
static inline __attribute_const__ __u16 __fswab16(__u16 val)
{
#ifdef __arch_swab16
return __arch_swab16(val);
#else
return ___constant_swab16(val);
c02280a8: e1a03c23 lsr r3, r3, #24
c02280ac: e1833409 orr r3, r3, r9, lsl #8
if (is_udplite) /* UDP-Lite */
c02280b0: e1580001 cmp r8, r1
uh->dest = fl4->fl4_dport;
c02280b4: e1c520b2 strh r2, [r5, #2]
uh->len = htons(len);
c02280b8: e1c530b4 strh r3, [r5, #4]
uh->check = 0;
c02280bc: e1c510b6 strh r1, [r5, #6]
if (is_udplite) /* UDP-Lite */
c02280c0: 0a000040 beq c02281c8 <udp_send_skb+0x164>
}
/* Fast-path computation of checksum. Socket may not be locked. */
static inline __wsum udplite_csum(struct sk_buff *skb)
{
const struct udp_sock *up = udp_sk(skb->sk);
c02280c4: e5943010 ldr r3, [r4, #16]
return skb->transport_header;
c02280c8: e594007c ldr r0, [r4, #124] ; 0x7c
const int off = skb_transport_offset(skb);
int len = skb->len - off;
if ((up->pcflag & UDPLITE_SEND_CC) && up->pcslen < len) {
c02280cc: e5d3c1f8 ldrb ip, [r3, #504] ; 0x1f8
return skb_transport_header(skb) - skb->data;
c02280d0: e5941094 ldr r1, [r4, #148] ; 0x94
int len = skb->len - off;
c02280d4: e594204c ldr r2, [r4, #76] ; 0x4c
c02280d8: e0611000 rsb r1, r1, r0
if ((up->pcflag & UDPLITE_SEND_CC) && up->pcslen < len) {
c02280dc: e31c0002 tst ip, #2
int len = skb->len - off;
c02280e0: e0612002 rsb r2, r1, r2
if ((up->pcflag & UDPLITE_SEND_CC) && up->pcslen < len) {
c02280e4: 1a000053 bne c0228238 <udp_send_skb+0x1d4>
if (0 < up->pcslen)
len = up->pcslen;
udp_hdr(skb)->len = htons(up->pcslen);
}
skb->ip_summed = CHECKSUM_NONE; /* no HW support for checksumming */
c02280e8: e5d43060 ldrb r3, [r4, #96] ; 0x60
return skb_checksum(skb, off, len, 0);
c02280ec: e1a00004 mov r0, r4
skb->ip_summed = CHECKSUM_NONE; /* no HW support for checksumming */
c02280f0: e3c3300c bic r3, r3, #12
c02280f4: e5c43060 strb r3, [r4, #96] ; 0x60
return skb_checksum(skb, off, len, 0);
c02280f8: e3a03000 mov r3, #0
c02280fc: ebfffffe bl 0 <skb_checksum>
c02280fc: R_ARM_CALL skb_checksum
c0228100: e1a03000 mov r3, r0
"adcs %0, %0, %4, lsl #8 \n"
#endif
"adcs %0, %0, %5 \n\
adc %0, %0, #0"
: "=&r"(sum)
: "r" (sum), "r" (daddr), "r" (saddr), "r" (len), "Ir" (htons(proto))
c0228104: e5d6108d ldrb r1, [r6, #141] ; 0x8d
__asm__(
c0228108: e5970018 ldr r0, [r7, #24]
c022810c: e597c014 ldr ip, [r7, #20]
c0228110: e1a01401 lsl r1, r1, #8
c0228114: e0932000 adds r2, r3, r0
c0228118: e0b2200c adcs r2, r2, ip
c022811c: e0b22409 adcs r2, r2, r9, lsl #8
c0228120: e0b22001 adcs r2, r2, r1
c0228124: e2a22000 adc r2, r2, #0
__asm__(
c0228128: e0823862 add r3, r2, r2, ror #16
return (__force __sum16)(~(__force u32)sum >> 16);
c022812c: e1e03003 mvn r3, r3
if (uh->check == 0)
c0228130: e1b03823 lsrs r3, r3, #16
uh->check = CSUM_MANGLED_0;
c0228134: 03e03000 mvneq r3, #0
err = ip_send_skb(skb);
c0228138: e1a00004 mov r0, r4
uh->check = CSUM_MANGLED_0;
c022813c: e1c530b6 strh r3, [r5, #6]
err = ip_send_skb(skb);
c0228140: ebfffffe bl 0 <ip_send_skb>
c0228140: R_ARM_CALL ip_send_skb
if (err) {
c0228144: e3500000 cmp r0, #0
c0228148: 0a000011 beq c0228194 <udp_send_skb+0x130>
if (err == -ENOBUFS && !inet->recverr) {
c022814c: e3700069 cmn r0, #105 ; 0x69
c0228150: 18bd87f0 popne {r4, r5, r6, r7, r8, r9, sl, pc}
c0228154: e5d63170 ldrb r3, [r6, #368] ; 0x170
c0228158: e2133001 ands r3, r3, #1
c022815c: 18bd87f0 popne {r4, r5, r6, r7, r8, r9, sl, pc}
UDP_INC_STATS_USER(sock_net(sk),
c0228160: e3580000 cmp r8, #0
c0228164: 0a000075 beq c0228340 <udp_send_skb+0x2dc>
asm volatile(
c0228168: e10f0000 mrs r0, CPSR
c022816c: e3802080 orr r2, r0, #128 ; 0x80
c0228170: e121f002 msr CPSR_c, r2
c0228174: e59f2228 ldr r2, [pc, #552] ; c02283a4 <udp_send_skb+0x340>
c0228178: e592109c ldr r1, [r2, #156] ; 0x9c
c022817c: e5912018 ldr r2, [r1, #24]
c0228180: e2822001 add r2, r2, #1
c0228184: e5812018 str r2, [r1, #24]
asm volatile(
c0228188: e121f000 msr CPSR_c, r0
err = 0;
c022818c: e1a00003 mov r0, r3
c0228190: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc}
UDP_INC_STATS_USER(sock_net(sk),
c0228194: e3580000 cmp r8, #0
c0228198: 1a00005e bne c0228318 <udp_send_skb+0x2b4>
asm volatile(
c022819c: e10f1000 mrs r1, CPSR
c02281a0: e3813080 orr r3, r1, #128 ; 0x80
c02281a4: e121f003 msr CPSR_c, r3
c02281a8: e59f31f4 ldr r3, [pc, #500] ; c02283a4 <udp_send_skb+0x340>
c02281ac: e5932098 ldr r2, [r3, #152] ; 0x98
c02281b0: e5923010 ldr r3, [r2, #16]
c02281b4: e2833001 add r3, r3, #1
c02281b8: e5823010 str r3, [r2, #16]
asm volatile(
c02281bc: e121f001 msr CPSR_c, r1
c02281c0: e3a00000 mov r0, #0
c02281c4: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc}
else if (sk->sk_no_check == UDP_CSUM_NOXMIT) { /* UDP csum disabled */
c02281c8: e5d6308c ldrb r3, [r6, #140] ; 0x8c
c02281cc: e203300c and r3, r3, #12
c02281d0: e3530004 cmp r3, #4
skb->ip_summed = CHECKSUM_NONE;
c02281d4: e5d43060 ldrb r3, [r4, #96] ; 0x60
c02281d8: 03c3300c biceq r3, r3, #12
c02281dc: 05c43060 strbeq r3, [r4, #96] ; 0x60
else if (sk->sk_no_check == UDP_CSUM_NOXMIT) { /* UDP csum disabled */
c02281e0: 0a000045 beq c02282fc <udp_send_skb+0x298>
} else if (skb->ip_summed == CHECKSUM_PARTIAL) { /* UDP hardware csum */
c02281e4: e203300c and r3, r3, #12
c02281e8: e353000c cmp r3, #12
c02281ec: 0a00001b beq c0228260 <udp_send_skb+0x1fc>
__wsum csum = csum_partial(skb_transport_header(skb),
c02281f0: e3a01008 mov r1, #8
c02281f4: e5942058 ldr r2, [r4, #88] ; 0x58
c02281f8: e594007c ldr r0, [r4, #124] ; 0x7c
c02281fc: ebfffffe bl 0 <csum_partial>
c02281fc: R_ARM_CALL csum_partial
for (skb = skb_shinfo(skb)->frag_list; skb; skb = skb->next) {
c0228200: e594208c ldr r2, [r4, #140] ; 0x8c
__wsum csum = csum_partial(skb_transport_header(skb),
c0228204: e1a03000 mov r3, r0
for (skb = skb_shinfo(skb)->frag_list; skb; skb = skb->next) {
c0228208: e5921008 ldr r1, [r2, #8]
c022820c: e3510000 cmp r1, #0
c0228210: 0affffbb beq c0228104 <udp_send_skb+0xa0>
csum = csum_add(csum, skb->csum);
c0228214: e5912058 ldr r2, [r1, #88] ; 0x58
for (skb = skb_shinfo(skb)->frag_list; skb; skb = skb->next) {
c0228218: e5911000 ldr r1, [r1]
static inline __wsum csum_add(__wsum csum, __wsum addend)
{
u32 res = (__force u32)csum;
res += (__force u32)addend;
return (__force __wsum)(res + (res < (__force u32)addend));
c022821c: e0933002 adds r3, r3, r2
c0228220: 23a00001 movcs r0, #1
c0228224: 33a00000 movcc r0, #0
c0228228: e3510000 cmp r1, #0
c022822c: e0803003 add r3, r0, r3
c0228230: 1afffff7 bne c0228214 <udp_send_skb+0x1b0>
c0228234: eaffffb2 b c0228104 <udp_send_skb+0xa0>
if ((up->pcflag & UDPLITE_SEND_CC) && up->pcslen < len) {
c0228238: e2833f7d add r3, r3, #500 ; 0x1f4
c022823c: e1d330b0 ldrh r3, [r3]
c0228240: e1520003 cmp r2, r3
c0228244: daffffa7 ble c02280e8 <udp_send_skb+0x84>
if (0 < up->pcslen)
c0228248: e3530000 cmp r3, #0
c022824c: e1a0c423 lsr ip, r3, #8
c0228250: 11a02003 movne r2, r3
c0228254: e18c3403 orr r3, ip, r3, lsl #8
udp_hdr(skb)->len = htons(up->pcslen);
c0228258: e1c030b4 strh r3, [r0, #4]
c022825c: eaffffa1 b c02280e8 <udp_send_skb+0x84>
struct sk_buff *frags = skb_shinfo(skb)->frag_list;
c0228260: e594308c ldr r3, [r4, #140] ; 0x8c
return skb->transport_header;
c0228264: e594907c ldr r9, [r4, #124] ; 0x7c
return skb_transport_header(skb) - skb->data;
c0228268: e5941094 ldr r1, [r4, #148] ; 0x94
c022826c: e5930008 ldr r0, [r3, #8]
int len = skb->len - offset;
c0228270: e594504c ldr r5, [r4, #76] ; 0x4c
c0228274: e0611009 rsb r1, r1, r9
c0228278: e0615005 rsb r5, r1, r5
if (!frags) {
c022827c: e3500000 cmp r0, #0
udp4_hwcsum(skb, fl4->saddr, fl4->daddr);
c0228280: e597a014 ldr sl, [r7, #20]
int len = skb->len - offset;
c0228284: e1a02005 mov r2, r5
udp4_hwcsum(skb, fl4->saddr, fl4->daddr);
c0228288: e5977018 ldr r7, [r7, #24]
if (!frags) {
c022828c: 11a03008 movne r3, r8
c0228290: 0a000035 beq c022836c <udp_send_skb+0x308>
csum = csum_add(csum, frags->csum);
c0228294: e590c058 ldr ip, [r0, #88] ; 0x58
hlen -= frags->len;
c0228298: e590e04c ldr lr, [r0, #76] ; 0x4c
c022829c: e093300c adds r3, r3, ip
c02282a0: 23a0c001 movcs ip, #1
c02282a4: 33a0c000 movcc ip, #0
} while ((frags = frags->next));
c02282a8: e5900000 ldr r0, [r0]
c02282ac: e08c3003 add r3, ip, r3
c02282b0: e3500000 cmp r0, #0
hlen -= frags->len;
c02282b4: e06e2002 rsb r2, lr, r2
} while ((frags = frags->next));
c02282b8: 1afffff5 bne c0228294 <udp_send_skb+0x230>
csum = skb_checksum(skb, offset, hlen, csum);
c02282bc: e1a00004 mov r0, r4
c02282c0: ebfffffe bl 0 <skb_checksum>
c02282c0: R_ARM_CALL skb_checksum
__asm__(
c02282c4: e0903007 adds r3, r0, r7
c02282c8: e0b3300a adcs r3, r3, sl
c02282cc: e0b33405 adcs r3, r3, r5, lsl #8
c02282d0: e2b33c11 adcs r3, r3, #4352 ; 0x1100
c02282d4: e2a33000 adc r3, r3, #0
__asm__(
c02282d8: e0833863 add r3, r3, r3, ror #16
return (__force __sum16)(~(__force u32)sum >> 16);
c02282dc: e1e03003 mvn r3, r3
if (uh->check == 0)
c02282e0: e1b03823 lsrs r3, r3, #16
uh->check = CSUM_MANGLED_0;
c02282e4: 03e03000 mvneq r3, #0
skb->ip_summed = CHECKSUM_NONE;
c02282e8: e5d42060 ldrb r2, [r4, #96] ; 0x60
c02282ec: e3c2200c bic r2, r2, #12
c02282f0: e5c42060 strb r2, [r4, #96] ; 0x60
uh->check = CSUM_MANGLED_0;
c02282f4: 01c930b6 strheq r3, [r9, #6]
c02282f8: 11c930b6 strhne r3, [r9, #6]
err = ip_send_skb(skb);
c02282fc: e1a00004 mov r0, r4
c0228300: ebfffffe bl 0 <ip_send_skb>
c0228300: R_ARM_CALL ip_send_skb
if (err) {
c0228304: e3500000 cmp r0, #0
c0228308: 0affffa3 beq c022819c <udp_send_skb+0x138>
if (err == -ENOBUFS && !inet->recverr) {
c022830c: e3700069 cmn r0, #105 ; 0x69
c0228310: 18bd87f0 popne {r4, r5, r6, r7, r8, r9, sl, pc}
c0228314: eaffff8e b c0228154 <udp_send_skb+0xf0>
asm volatile(
c0228318: e10f1000 mrs r1, CPSR
c022831c: e3813080 orr r3, r1, #128 ; 0x80
c0228320: e121f003 msr CPSR_c, r3
UDP_INC_STATS_USER(sock_net(sk),
c0228324: e59f3078 ldr r3, [pc, #120] ; c02283a4 <udp_send_skb+0x340>
c0228328: e593209c ldr r2, [r3, #156] ; 0x9c
c022832c: e5923010 ldr r3, [r2, #16]
c0228330: e2833001 add r3, r3, #1
c0228334: e5823010 str r3, [r2, #16]
asm volatile(
c0228338: e121f001 msr CPSR_c, r1
c022833c: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc}
asm volatile(
c0228340: e10f1000 mrs r1, CPSR
c0228344: e3813080 orr r3, r1, #128 ; 0x80
c0228348: e121f003 msr CPSR_c, r3
UDP_INC_STATS_USER(sock_net(sk),
c022834c: e59f3050 ldr r3, [pc, #80] ; c02283a4 <udp_send_skb+0x340>
c0228350: e5932098 ldr r2, [r3, #152] ; 0x98
c0228354: e5923018 ldr r3, [r2, #24]
c0228358: e2833001 add r3, r3, #1
c022835c: e5823018 str r3, [r2, #24]
asm volatile(
c0228360: e121f001 msr CPSR_c, r1
err = 0;
c0228364: e1a00008 mov r0, r8
c0228368: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc}
skb->csum_offset = offsetof(struct udphdr, check);
c022836c: e3a01006 mov r1, #6
__asm__(
c0228370: e0983007 adds r3, r8, r7
c0228374: e0b3300a adcs r3, r3, sl
c0228378: e0b33405 adcs r3, r3, r5, lsl #8
c022837c: e2b33c11 adcs r3, r3, #4352 ; 0x1100
c0228380: e2a33000 adc r3, r3, #0
__asm__(
c0228384: e0833863 add r3, r3, r3, ror #16
skb->csum_start = skb_transport_header(skb) - skb->head;
c0228388: e5942090 ldr r2, [r4, #144] ; 0x90
uh->check = ~csum_tcpudp_magic(src, dst, len,
c022838c: e1a03823 lsr r3, r3, #16
skb->csum_start = skb_transport_header(skb) - skb->head;
c0228390: e0622009 rsb r2, r2, r9
c0228394: e1c425b8 strh r2, [r4, #88] ; 0x58
skb->csum_offset = offsetof(struct udphdr, check);
c0228398: e1c415ba strh r1, [r4, #90] ; 0x5a
uh->check = ~csum_tcpudp_magic(src, dst, len,
c022839c: e1c930b6 strh r3, [r9, #6]
c02283a0: eaffffd5 b c02282fc <udp_send_skb+0x298>
c02283a4: 00000000 .word 0x00000000
c02283a4: R_ARM_ABS32 init_net
c02283a8 <udp_push_pending_frames>:
{
c02283a8: e92d4038 push {r3, r4, r5, lr}
struct flowi4 *fl4 = &inet->cork.fl.u.ip4;
c02283ac: e2805f6a add r5, r0, #424 ; 0x1a8
struct rtable **rtp,
unsigned int flags);
static inline struct sk_buff *ip_finish_skb(struct sock *sk, struct flowi4 *fl4)
{
return __ip_make_skb(sk, fl4, &sk->sk_write_queue, &inet_sk(sk)->cork.base);
c02283b0: e2803f61 add r3, r0, #388 ; 0x184
c02283b4: e1a01005 mov r1, r5
c02283b8: e2802080 add r2, r0, #128 ; 0x80
{
c02283bc: e1a04000 mov r4, r0
c02283c0: ebfffffe bl 0 <__ip_make_skb>
c02283c0: R_ARM_CALL __ip_make_skb
if (!skb)
c02283c4: e2503000 subs r3, r0, #0
int err = 0;
c02283c8: 01a00003 moveq r0, r3
if (!skb)
c02283cc: 0a000001 beq c02283d8 <udp_push_pending_frames+0x30>
err = udp_send_skb(skb, fl4);
c02283d0: e1a01005 mov r1, r5
c02283d4: ebffff22 bl c0228064 <udp_send_skb>
up->len = 0;
c02283d8: e3a03000 mov r3, #0
c02283dc: e2842e1f add r2, r4, #496 ; 0x1f0
c02283e0: e1c230b2 strh r3, [r2, #2]
up->pending = 0;
c02283e4: e58431e8 str r3, [r4, #488] ; 0x1e8
}
c02283e8: e8bd8038 pop {r3, r4, r5, pc}
c02283ec <udp_disconnect>:
{
c02283ec: e92d4038 push {r3, r4, r5, lr}
inet->inet_daddr = 0;
c02283f0: e3a02000 mov r2, #0
c02283f4: e1a03000 mov r3, r0
sk->sk_state = TCP_CLOSE;
c02283f8: e3a01007 mov r1, #7
c02283fc: e5c0100e strb r1, [r0, #14]
inet->inet_daddr = 0;
c0228400: e4832158 str r2, [r3], #344 ; 0x158
inet->inet_dport = 0;
c0228404: e1c320b0 strh r2, [r3]
if (!(sk->sk_userlocks & SOCK_BINDADDR_LOCK))
c0228408: e5d0308c ldrb r3, [r0, #140] ; 0x8c
sk->sk_bound_dev_if = 0;
c022840c: e5802010 str r2, [r0, #16]
if (!(sk->sk_userlocks & SOCK_BINDADDR_LOCK))
c0228410: e1a03223 lsr r3, r3, #4
c0228414: e2132004 ands r2, r3, #4
c0228418: e20330ff and r3, r3, #255 ; 0xff
#include <linux/ipv6.h>
#endif
static __inline__ void inet_reset_saddr(struct sock *sk)
{
inet_sk(sk)->inet_rcv_saddr = inet_sk(sk)->inet_saddr = 0;
c022841c: 0580215c streq r2, [r0, #348] ; 0x15c
c0228420: 05802004 streq r2, [r0, #4]
if (!(sk->sk_userlocks & SOCK_BINDPORT_LOCK)) {
c0228424: e2134008 ands r4, r3, #8
{
c0228428: e1a05000 mov r5, r0
if (!(sk->sk_userlocks & SOCK_BINDPORT_LOCK)) {
c022842c: 0a000013 beq c0228480 <udp_disconnect+0x94>
c0228430: e1a0300d mov r3, sp
c0228434: e3c34d7f bic r4, r3, #8128 ; 0x1fc0
c0228438: e3c4403f bic r4, r4, #63 ; 0x3f
raw_spin_lock(&lock->rlock);
c022843c: e5943004 ldr r3, [r4, #4]
c0228440: e2833001 add r3, r3, #1
c0228444: e5843004 str r3, [r4, #4]
sk->sk_tx_queue_mapping = tx_queue;
}
static inline void sk_tx_queue_clear(struct sock *sk)
{
sk->sk_tx_queue_mapping = -1;
c0228448: e3e03000 mvn r3, #0
sk_tx_queue_clear(sk);
/*
* This can be called while sk is owned by the caller only,
* with no state that can be checked in a rcu_dereference_check() cond
*/
old_dst = rcu_dereference_raw(sk->sk_dst_cache);
c022844c: e5950070 ldr r0, [r5, #112] ; 0x70
sk->sk_tx_queue_mapping = -1;
c0228450: e5853028 str r3, [r5, #40] ; 0x28
rcu_assign_pointer(sk->sk_dst_cache, dst);
c0228454: e3a03000 mov r3, #0
c0228458: e5853070 str r3, [r5, #112] ; 0x70
dst_release(old_dst);
c022845c: ebfffffe bl 0 <dst_release>
c022845c: R_ARM_CALL dst_release
raw_spin_unlock(&lock->rlock);
c0228460: e5943004 ldr r3, [r4, #4]
c0228464: e2433001 sub r3, r3, #1
c0228468: e5843004 str r3, [r4, #4]
c022846c: e5943000 ldr r3, [r4]
c0228470: e3130002 tst r3, #2
c0228474: 1a000007 bne c0228498 <udp_disconnect+0xac>
}
c0228478: e3a00000 mov r0, #0
c022847c: e8bd8038 pop {r3, r4, r5, pc}
sk->sk_prot->unhash(sk);
c0228480: e590301c ldr r3, [r0, #28]
c0228484: e5933040 ldr r3, [r3, #64] ; 0x40
c0228488: e12fff33 blx r3
inet->inet_sport = 0;
c022848c: e2853f59 add r3, r5, #356 ; 0x164
c0228490: e1c340b0 strh r4, [r3]
c0228494: eaffffe5 b c0228430 <udp_disconnect+0x44>
c0228498: ebfffffe bl 0 <preempt_schedule>
c0228498: R_ARM_CALL preempt_schedule
}
c022849c: e3a00000 mov r0, #0
c02284a0: e8bd8038 pop {r3, r4, r5, pc}
c02284a4 <udp_lib_setsockopt>:
{
c02284a4: e92d4070 push {r4, r5, r6, lr}
c02284a8: e59d1010 ldr r1, [sp, #16]
c02284ac: e1a0c000 mov ip, r0
if (optlen < sizeof(int))
c02284b0: e3510003 cmp r1, #3
int is_udplite = IS_UDPLITE(sk);
c02284b4: e5d061f8 ldrb r6, [r0, #504] ; 0x1f8
if (optlen < sizeof(int))
c02284b8: 9a00005d bls c0228634 <udp_lib_setsockopt+0x190>
c02284bc: e1a04002 mov r4, r2
c02284c0: e1a0200d mov r2, sp
c02284c4: e3c21d7f bic r1, r2, #8128 ; 0x1fc0
c02284c8: e3c1103f bic r1, r1, #63 ; 0x3f
if (get_user(val, (int __user *)optval))
c02284cc: e5911008 ldr r1, [r1, #8]
c02284d0: e1a00003 mov r0, r3
c02284d4: e2411001 sub r1, r1, #1
c02284d8: ebfffffe bl 0 <__get_user_4>
c02284d8: R_ARM_CALL __get_user_4
c02284dc: e2505000 subs r5, r0, #0
c02284e0: e1a03002 mov r3, r2
c02284e4: 1a000054 bne c022863c <udp_lib_setsockopt+0x198>
switch (optname) {
c02284e8: e354000a cmp r4, #10
c02284ec: 0a000037 beq c02285d0 <udp_lib_setsockopt+0x12c>
c02284f0: da00000d ble c022852c <udp_lib_setsockopt+0x88>
c02284f4: e354000b cmp r4, #11
c02284f8: 0a00001e beq c0228578 <udp_lib_setsockopt+0xd4>
c02284fc: e3540064 cmp r4, #100 ; 0x64
c0228500: 1a000019 bne c022856c <udp_lib_setsockopt+0xc8>
switch (val) {
c0228504: e3520000 cmp r2, #0
c0228508: ba000017 blt c022856c <udp_lib_setsockopt+0xc8>
c022850c: e3520002 cmp r2, #2
c0228510: da000044 ble c0228628 <udp_lib_setsockopt+0x184>
c0228514: e3520003 cmp r2, #3
c0228518: 1a000013 bne c022856c <udp_lib_setsockopt+0xc8>
up->encap_type = val;
c022851c: e28cce1f add ip, ip, #496 ; 0x1f0
c0228520: e1cc30b0 strh r3, [ip]
}
c0228524: e1a00005 mov r0, r5
c0228528: e8bd8070 pop {r4, r5, r6, pc}
switch (optname) {
c022852c: e3540001 cmp r4, #1
c0228530: 1a00000d bne c022856c <udp_lib_setsockopt+0xc8>
if (val != 0) {
c0228534: e3520000 cmp r2, #0
up->corkflag = 1;
c0228538: 158c41ec strne r4, [ip, #492] ; 0x1ec
if (val != 0) {
c022853c: 1a00000b bne c0228570 <udp_lib_setsockopt+0xcc>
c0228540: e1a0400c mov r4, ip
lock_sock_nested(sk, 0);
c0228544: e1a0000c mov r0, ip
up->corkflag = 0;
c0228548: e58c51ec str r5, [ip, #492] ; 0x1ec
c022854c: e1a01005 mov r1, r5
c0228550: ebfffffe bl 0 <lock_sock_nested>
c0228550: R_ARM_CALL lock_sock_nested
(*push_pending_frames)(sk);
c0228554: e1a00004 mov r0, r4
c0228558: e59d3014 ldr r3, [sp, #20]
c022855c: e12fff33 blx r3
release_sock(sk);
c0228560: e1a00004 mov r0, r4
c0228564: ebfffffe bl 0 <release_sock>
c0228564: R_ARM_CALL release_sock
c0228568: ea000000 b c0228570 <udp_lib_setsockopt+0xcc>
return -ENOPROTOOPT;
c022856c: e3e0505b mvn r5, #91 ; 0x5b
}
c0228570: e1a00005 mov r0, r5
c0228574: e8bd8070 pop {r4, r5, r6, pc}
if (!is_udplite) /* Disable the option on UDP sockets */
c0228578: e3560000 cmp r6, #0
c022857c: 0afffffa beq c022856c <udp_lib_setsockopt+0xc8>
if (val != 0 && val < 8) /* Avoid silly minimal values. */
c0228580: e3520007 cmp r2, #7
c0228584: c3a02000 movgt r2, #0
c0228588: d3a02001 movle r2, #1
c022858c: e3530000 cmp r3, #0
c0228590: 03a02000 moveq r2, #0
c0228594: e3520000 cmp r2, #0
c0228598: 13a03008 movne r3, #8
c022859c: 1a000004 bne c02285b4 <udp_lib_setsockopt+0x110>
c02285a0: e59f209c ldr r2, [pc, #156] ; c0228644 <udp_lib_setsockopt+0x1a0>
c02285a4: e1530002 cmp r3, r2
c02285a8: a1a03002 movge r3, r2
c02285ac: e1a03803 lsl r3, r3, #16
c02285b0: e1a03823 lsr r3, r3, #16
up->pcrlen = val;
c02285b4: e28c2f7d add r2, ip, #500 ; 0x1f4
c02285b8: e1c230b2 strh r3, [r2, #2]
up->pcflag |= UDPLITE_RECV_CC;
c02285bc: e5dc31f8 ldrb r3, [ip, #504] ; 0x1f8
}
c02285c0: e1a00005 mov r0, r5
up->pcflag |= UDPLITE_RECV_CC;
c02285c4: e3833004 orr r3, r3, #4
c02285c8: e5cc31f8 strb r3, [ip, #504] ; 0x1f8
}
c02285cc: e8bd8070 pop {r4, r5, r6, pc}
if (!is_udplite) /* Disable the option on UDP sockets */
c02285d0: e3560000 cmp r6, #0
c02285d4: 0affffe4 beq c022856c <udp_lib_setsockopt+0xc8>
if (val != 0 && val < 8) /* Illegal coverage: use default (8) */
c02285d8: e3520007 cmp r2, #7
c02285dc: c3a02000 movgt r2, #0
c02285e0: d3a02001 movle r2, #1
c02285e4: e3530000 cmp r3, #0
c02285e8: 03a02000 moveq r2, #0
c02285ec: e3520000 cmp r2, #0
c02285f0: 13a03008 movne r3, #8
c02285f4: 1a000004 bne c022860c <udp_lib_setsockopt+0x168>
c02285f8: e59f2044 ldr r2, [pc, #68] ; c0228644 <udp_lib_setsockopt+0x1a0>
c02285fc: e1530002 cmp r3, r2
c0228600: a1a03002 movge r3, r2
c0228604: e1a03803 lsl r3, r3, #16
c0228608: e1a03823 lsr r3, r3, #16
up->pcslen = val;
c022860c: e28c2f7d add r2, ip, #500 ; 0x1f4
c0228610: e1c230b0 strh r3, [r2]
up->pcflag |= UDPLITE_SEND_CC;
c0228614: e5dc31f8 ldrb r3, [ip, #504] ; 0x1f8
}
c0228618: e1a00005 mov r0, r5
up->pcflag |= UDPLITE_SEND_CC;
c022861c: e3833002 orr r3, r3, #2
c0228620: e5cc31f8 strb r3, [ip, #504] ; 0x1f8
}
c0228624: e8bd8070 pop {r4, r5, r6, pc}
up->encap_rcv = xfrm4_udp_encap_rcv;
c0228628: e59f2018 ldr r2, [pc, #24] ; c0228648 <udp_lib_setsockopt+0x1a4>
c022862c: e58c21fc str r2, [ip, #508] ; 0x1fc
c0228630: eaffffb9 b c022851c <udp_lib_setsockopt+0x78>
return -EINVAL;
c0228634: e3e05015 mvn r5, #21
c0228638: eaffffcc b c0228570 <udp_lib_setsockopt+0xcc>
return -EFAULT;
c022863c: e3e0500d mvn r5, #13
c0228640: eaffffca b c0228570 <udp_lib_setsockopt+0xcc>
c0228644: 0000ffff .word 0x0000ffff
c0228648: 00000000 .word 0x00000000
c0228648: R_ARM_ABS32 xfrm4_udp_encap_rcv
c022864c <first_packet_length>:
{
c022864c: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr}
c0228650: e24dd010 sub sp, sp, #16
c0228654: e1a0200d mov r2, sp
list->qlen = 0;
c0228658: e3a03000 mov r3, #0
c022865c: e1a05000 mov r5, r0
list->prev = list->next = (struct sk_buff *)list;
c0228660: e28d7004 add r7, sp, #4
c0228664: e3c28d7f bic r8, r2, #8128 ; 0x1fc0
list->qlen = 0;
c0228668: e58d300c str r3, [sp, #12]
list->prev = list->next = (struct sk_buff *)list;
c022866c: e58d7004 str r7, [sp, #4]
c0228670: e58d7008 str r7, [sp, #8]
raw_spin_lock_bh(&lock->rlock);
c0228674: ebfffffe bl 0 <local_bh_disable>
c0228674: R_ARM_CALL local_bh_disable
c0228678: e3c8203f bic r2, r8, #63 ; 0x3f
c022867c: e5923004 ldr r3, [r2, #4]
struct sk_buff_head list_kill, *rcvq = &sk->sk_receive_queue;
c0228680: e285903c add r9, r5, #60 ; 0x3c
c0228684: e2833001 add r3, r3, #1
c0228688: e5823004 str r3, [r2, #4]
struct sk_buff *list = ((const struct sk_buff *)list_)->next;
c022868c: e595403c ldr r4, [r5, #60] ; 0x3c
while ((skb = skb_peek(rcvq)) != NULL &&
c0228690: e1590004 cmp r9, r4
c0228694: 13540000 cmpne r4, #0
c0228698: 0a000065 beq c0228834 <first_packet_length+0x1e8>
extern __sum16 __skb_checksum_complete_head(struct sk_buff *skb, int len);
extern __sum16 __skb_checksum_complete(struct sk_buff *skb);
static inline int skb_csum_unnecessary(const struct sk_buff *skb)
{
return skb->ip_summed & CHECKSUM_UNNECESSARY;
c022869c: e5d46060 ldrb r6, [r4, #96] ; 0x60
c02286a0: e1a06126 lsr r6, r6, #2
return !skb_csum_unnecessary(skb) &&
c02286a4: e2166001 ands r6, r6, #1
c02286a8: 0a00000b beq c02286dc <first_packet_length+0x90>
res = skb ? skb->len : 0;
c02286ac: e594404c ldr r4, [r4, #76] ; 0x4c
c02286b0: e3c8203f bic r2, r8, #63 ; 0x3f
raw_spin_unlock_bh(&lock->rlock);
c02286b4: e5923004 ldr r3, [r2, #4]
c02286b8: e2433001 sub r3, r3, #1
c02286bc: e5823004 str r3, [r2, #4]
c02286c0: ebfffffe bl 0 <local_bh_enable>
c02286c0: R_ARM_CALL local_bh_enable
if (!skb_queue_empty(&list_kill)) {
c02286c4: e59d3004 ldr r3, [sp, #4]
c02286c8: e1530007 cmp r3, r7
c02286cc: 1a000033 bne c02287a0 <first_packet_length+0x154>
}
c02286d0: e1a00004 mov r0, r4
c02286d4: e28dd010 add sp, sp, #16
c02286d8: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc}
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS,
c02286dc: e59fa170 ldr sl, [pc, #368] ; c0228854 <first_packet_length+0x208>
return __skb_checksum_complete_head(skb, UDP_SKB_CB(skb)->cscov);
c02286e0: e1a00004 mov r0, r4
c02286e4: e1d412bc ldrh r1, [r4, #44] ; 0x2c
c02286e8: ebfffffe bl 0 <__skb_checksum_complete_head>
c02286e8: R_ARM_CALL __skb_checksum_complete_head
return !skb_csum_unnecessary(skb) &&
c02286ec: e3500000 cmp r0, #0
c02286f0: 0affffed beq c02286ac <first_packet_length+0x60>
c02286f4: e5d531f8 ldrb r3, [r5, #504] ; 0x1f8
c02286f8: e3530000 cmp r3, #0
c02286fc: 1a000022 bne c022878c <first_packet_length+0x140>
c0228700: e59a2098 ldr r2, [sl, #152] ; 0x98
c0228704: e592300c ldr r3, [r2, #12]
c0228708: e2833001 add r3, r3, #1
c022870c: e582300c str r3, [r2, #12]
asm volatile(
c0228710: e10f2000 mrs r2, CPSR
c0228714: e3823080 orr r3, r2, #128 ; 0x80
c0228718: e121f003 msr CPSR_c, r3
val = v->counter;
c022871c: e595305c ldr r3, [r5, #92] ; 0x5c
v->counter = val += i;
c0228720: e2833001 add r3, r3, #1
c0228724: e585305c str r3, [r5, #92] ; 0x5c
asm volatile(
c0228728: e121f002 msr CPSR_c, r2
list->qlen--;
c022872c: e5953044 ldr r3, [r5, #68] ; 0x44
c0228730: e2433001 sub r3, r3, #1
c0228734: e5853044 str r3, [r5, #68] ; 0x44
prev = skb->prev;
c0228738: e894000c ldm r4, {r2, r3}
skb->next = skb->prev = NULL;
c022873c: e5846000 str r6, [r4]
c0228740: e5846004 str r6, [r4, #4]
next->prev = prev;
c0228744: e5823004 str r3, [r2, #4]
prev->next = next;
c0228748: e5832000 str r2, [r3]
__skb_insert(newsk, next->prev, next, list);
c022874c: e59d3008 ldr r3, [sp, #8]
newsk->next = next;
c0228750: e5847000 str r7, [r4]
newsk->prev = prev;
c0228754: e5843004 str r3, [r4, #4]
next->prev = prev->next = newsk;
c0228758: e5834000 str r4, [r3]
c022875c: e58d4008 str r4, [sp, #8]
struct sk_buff *list = ((const struct sk_buff *)list_)->next;
c0228760: e595403c ldr r4, [r5, #60] ; 0x3c
list->qlen++;
c0228764: e59d300c ldr r3, [sp, #12]
while ((skb = skb_peek(rcvq)) != NULL &&
c0228768: e1590004 cmp r9, r4
c022876c: 13540000 cmpne r4, #0
c0228770: e2833001 add r3, r3, #1
c0228774: e58d300c str r3, [sp, #12]
c0228778: 0a00002d beq c0228834 <first_packet_length+0x1e8>
return skb->ip_summed & CHECKSUM_UNNECESSARY;
c022877c: e5d43060 ldrb r3, [r4, #96] ; 0x60
c0228780: e3130004 tst r3, #4
c0228784: 1affffc8 bne c02286ac <first_packet_length+0x60>
c0228788: eaffffd4 b c02286e0 <first_packet_length+0x94>
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS,
c022878c: e59a209c ldr r2, [sl, #156] ; 0x9c
c0228790: e592300c ldr r3, [r2, #12]
c0228794: e2833001 add r3, r3, #1
c0228798: e582300c str r3, [r2, #12]
c022879c: eaffffdb b c0228710 <first_packet_length+0xc4>
bool slow = lock_sock_fast(sk);
c02287a0: e1a00005 mov r0, r5
c02287a4: ebfffffe bl 0 <lock_sock_fast>
c02287a4: R_ARM_CALL lock_sock_fast
struct sk_buff *list = ((const struct sk_buff *)list_)->next;
c02287a8: e59d3004 ldr r3, [sp, #4]
c02287ac: e1a06000 mov r6, r0
if (skb)
c02287b0: e1530007 cmp r3, r7
c02287b4: 13530000 cmpne r3, #0
c02287b8: 0a00000e beq c02287f8 <first_packet_length+0x1ac>
skb->next = skb->prev = NULL;
c02287bc: e3a09000 mov r9, #0
list->qlen--;
c02287c0: e59d200c ldr r2, [sp, #12]
kfree_skb(skb);
c02287c4: e1a00003 mov r0, r3
list->qlen--;
c02287c8: e2422001 sub r2, r2, #1
c02287cc: e58d200c str r2, [sp, #12]
prev = skb->prev;
c02287d0: e8930006 ldm r3, {r1, r2}
skb->next = skb->prev = NULL;
c02287d4: e5839000 str r9, [r3]
c02287d8: e5839004 str r9, [r3, #4]
next->prev = prev;
c02287dc: e5812004 str r2, [r1, #4]
prev->next = next;
c02287e0: e5821000 str r1, [r2]
kfree_skb(skb);
c02287e4: ebfffffe bl 0 <kfree_skb>
c02287e4: R_ARM_CALL kfree_skb
struct sk_buff *list = ((const struct sk_buff *)list_)->next;
c02287e8: e59d3004 ldr r3, [sp, #4]
if (skb)
c02287ec: e1530007 cmp r3, r7
c02287f0: 13530000 cmpne r3, #0
c02287f4: 1afffff1 bne c02287c0 <first_packet_length+0x174>
return !!sk->sk_prot->memory_allocated;
c02287f8: e595301c ldr r3, [r5, #28]
if (!sk_has_account(sk))
c02287fc: e5933058 ldr r3, [r3, #88] ; 0x58
c0228800: e3530000 cmp r3, #0
c0228804: 0a000002 beq c0228814 <first_packet_length+0x1c8>
if (sk->sk_forward_alloc > SK_MEM_QUANTUM)
c0228808: e5953058 ldr r3, [r5, #88] ; 0x58
c022880c: e3530a01 cmp r3, #4096 ; 0x1000
c0228810: ca00000c bgt c0228848 <first_packet_length+0x1fc>
if (slow)
c0228814: e3560000 cmp r6, #0
c0228818: 1a000007 bne c022883c <first_packet_length+0x1f0>
c022881c: e3c8803f bic r8, r8, #63 ; 0x3f
c0228820: e5983004 ldr r3, [r8, #4]
c0228824: e2433001 sub r3, r3, #1
c0228828: e5883004 str r3, [r8, #4]
c022882c: ebfffffe bl 0 <local_bh_enable>
c022882c: R_ARM_CALL local_bh_enable
c0228830: eaffffa6 b c02286d0 <first_packet_length+0x84>
res = skb ? skb->len : 0;
c0228834: e3a04000 mov r4, #0
c0228838: eaffff9c b c02286b0 <first_packet_length+0x64>
release_sock(sk);
c022883c: e1a00005 mov r0, r5
c0228840: ebfffffe bl 0 <release_sock>
c0228840: R_ARM_CALL release_sock
c0228844: eaffffa1 b c02286d0 <first_packet_length+0x84>
__sk_mem_reclaim(sk);
c0228848: e1a00005 mov r0, r5
c022884c: ebfffffe bl 0 <__sk_mem_reclaim>
c022884c: R_ARM_CALL __sk_mem_reclaim
c0228850: eaffffef b c0228814 <first_packet_length+0x1c8>
c0228854: 00000000 .word 0x00000000
c0228854: R_ARM_ABS32 init_net
c0228858 <udp_recvmsg>:
{
c0228858: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
c022885c: e1a05002 mov r5, r2
int peeked, off = 0;
c0228860: e3a02000 mov r2, #0
{
c0228864: e24dd02c sub sp, sp, #44 ; 0x2c
c0228868: e1a07003 mov r7, r3
if (flags & MSG_ERRQUEUE)
c022886c: e59d3054 ldr r3, [sp, #84] ; 0x54
{
c0228870: e1a06001 mov r6, r1
if (flags & MSG_ERRQUEUE)
c0228874: e3130a02 tst r3, #8192 ; 0x2000
struct sockaddr_in *sin = (struct sockaddr_in *)msg->msg_name;
c0228878: e5953000 ldr r3, [r5]
int peeked, off = 0;
c022887c: e58d2020 str r2, [sp, #32]
struct sockaddr_in *sin = (struct sockaddr_in *)msg->msg_name;
c0228880: e58d3014 str r3, [sp, #20]
int is_udplite = IS_UDPLITE(sk);
c0228884: e5d131f8 ldrb r3, [r1, #504] ; 0x1f8
c0228888: e58d3010 str r3, [sp, #16]
if (flags & MSG_ERRQUEUE)
c022888c: 1a0000a2 bne c0228b1c <udp_recvmsg+0x2c4>
c0228890: e59d3050 ldr r3, [sp, #80] ; 0x50
c0228894: e28da024 add sl, sp, #36 ; 0x24
c0228898: e3530000 cmp r3, #0
c022889c: e1a0300d mov r3, sp
c02288a0: e3c39d7f bic r9, r3, #8128 ; 0x1fc0
c02288a4: 13a08040 movne r8, #64 ; 0x40
c02288a8: 03a08000 moveq r8, #0
c02288ac: e3c9903f bic r9, r9, #63 ; 0x3f
c02288b0: e1a0b009 mov fp, r9
skb = __skb_recv_datagram(sk, flags | (noblock ? MSG_DONTWAIT : 0),
c02288b4: e59d3054 ldr r3, [sp, #84] ; 0x54
c02288b8: e1838008 orr r8, r3, r8
c02288bc: e58da000 str sl, [sp]
c02288c0: e1a00006 mov r0, r6
c02288c4: e1a01008 mov r1, r8
c02288c8: e28d201c add r2, sp, #28
c02288cc: e28d3020 add r3, sp, #32
c02288d0: ebfffffe bl 0 <__skb_recv_datagram>
c02288d0: R_ARM_CALL __skb_recv_datagram
if (!skb)
c02288d4: e2504000 subs r4, r0, #0
c02288d8: 0a000017 beq c022893c <udp_recvmsg+0xe4>
ulen = skb->len - sizeof(struct udphdr);
c02288dc: e594304c ldr r3, [r4, #76] ; 0x4c
c02288e0: e2439008 sub r9, r3, #8
if (copied > ulen)
c02288e4: e1570009 cmp r7, r9
c02288e8: 8a000016 bhi c0228948 <udp_recvmsg+0xf0>
else if (copied < ulen)
c02288ec: 2a000046 bcs c0228a0c <udp_recvmsg+0x1b4>
msg->msg_flags |= MSG_TRUNC;
c02288f0: e5952018 ldr r2, [r5, #24]
c02288f4: e58d700c str r7, [sp, #12]
c02288f8: e3822020 orr r2, r2, #32
c02288fc: e5852018 str r2, [r5, #24]
return skb->ip_summed & CHECKSUM_UNNECESSARY;
c0228900: e5d42060 ldrb r2, [r4, #96] ; 0x60
c0228904: e3120004 tst r2, #4
c0228908: 0a00004b beq c0228a3c <udp_recvmsg+0x1e4>
err = skb_copy_datagram_iovec(skb, sizeof(struct udphdr),
c022890c: e1a00004 mov r0, r4
c0228910: e3a01008 mov r1, #8
c0228914: e5952008 ldr r2, [r5, #8]
c0228918: e59d300c ldr r3, [sp, #12]
c022891c: ebfffffe bl 0 <skb_copy_datagram_iovec>
c022891c: R_ARM_CALL skb_copy_datagram_iovec
c0228920: e1a0b009 mov fp, r9
c0228924: e58d0024 str r0, [sp, #36] ; 0x24
if (err)
c0228928: e3500000 cmp r0, #0
c022892c: 0a000048 beq c0228a54 <udp_recvmsg+0x1fc>
skb_free_datagram_locked(sk, skb);
c0228930: e1a00006 mov r0, r6
c0228934: e1a01004 mov r1, r4
c0228938: ebfffffe bl 0 <skb_free_datagram_locked>
c0228938: R_ARM_CALL skb_free_datagram_locked
return err;
c022893c: e59d0024 ldr r0, [sp, #36] ; 0x24
}
c0228940: e28dd02c add sp, sp, #44 ; 0x2c
c0228944: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
c0228948: e58d900c str r9, [sp, #12]
if (copied < ulen || UDP_SKB_CB(skb)->partial_cov) {
c022894c: e5d4202e ldrb r2, [r4, #46] ; 0x2e
c0228950: e3520000 cmp r2, #0
c0228954: 1affffe9 bne c0228900 <udp_recvmsg+0xa8>
c0228958: e5d42060 ldrb r2, [r4, #96] ; 0x60
if (checksum_valid || skb_csum_unnecessary(skb))
c022895c: e3120004 tst r2, #4
c0228960: 1affffe9 bne c022890c <udp_recvmsg+0xb4>
err = skb_copy_and_csum_datagram_iovec(skb,
c0228964: e1a00004 mov r0, r4
c0228968: e3a01008 mov r1, #8
c022896c: e5952008 ldr r2, [r5, #8]
c0228970: ebfffffe bl 0 <skb_copy_and_csum_datagram_iovec>
c0228970: R_ARM_CALL skb_copy_and_csum_datagram_iovec
if (err == -EINVAL)
c0228974: e3700016 cmn r0, #22
err = skb_copy_and_csum_datagram_iovec(skb,
c0228978: e58d0024 str r0, [sp, #36] ; 0x24
if (err == -EINVAL)
c022897c: 1a000072 bne c0228b4c <udp_recvmsg+0x2f4>
slow = lock_sock_fast(sk);
c0228980: e1a00006 mov r0, r6
c0228984: ebfffffe bl 0 <lock_sock_fast>
c0228984: R_ARM_CALL lock_sock_fast
if (!skb_kill_datagram(sk, skb, flags))
c0228988: e1a01004 mov r1, r4
slow = lock_sock_fast(sk);
c022898c: e1a09000 mov r9, r0
if (!skb_kill_datagram(sk, skb, flags))
c0228990: e59d2054 ldr r2, [sp, #84] ; 0x54
c0228994: e1a00006 mov r0, r6
c0228998: ebfffffe bl 0 <skb_kill_datagram>
c0228998: R_ARM_CALL skb_kill_datagram
c022899c: e3500000 cmp r0, #0
c02289a0: 1a00000b bne c02289d4 <udp_recvmsg+0x17c>
UDP_INC_STATS_USER(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
c02289a4: e59d3010 ldr r3, [sp, #16]
c02289a8: e3530000 cmp r3, #0
c02289ac: 0a000018 beq c0228a14 <udp_recvmsg+0x1bc>
asm volatile(
c02289b0: e10f1000 mrs r1, CPSR
c02289b4: e3813080 orr r3, r1, #128 ; 0x80
c02289b8: e121f003 msr CPSR_c, r3
c02289bc: e59f31c8 ldr r3, [pc, #456] ; c0228b8c <udp_recvmsg+0x334>
c02289c0: e593209c ldr r2, [r3, #156] ; 0x9c
c02289c4: e592300c ldr r3, [r2, #12]
c02289c8: e2833001 add r3, r3, #1
c02289cc: e582300c str r3, [r2, #12]
asm volatile(
c02289d0: e121f001 msr CPSR_c, r1
if (slow)
c02289d4: e3590000 cmp r9, #0
c02289d8: 0a000006 beq c02289f8 <udp_recvmsg+0x1a0>
release_sock(sk);
c02289dc: e1a00006 mov r0, r6
c02289e0: ebfffffe bl 0 <release_sock>
c02289e0: R_ARM_CALL release_sock
cond_resched();
c02289e4: ebfffffe bl 0 <_cond_resched>
c02289e4: R_ARM_CALL _cond_resched
msg->msg_flags &= ~MSG_TRUNC;
c02289e8: e5953018 ldr r3, [r5, #24]
c02289ec: e3c33020 bic r3, r3, #32
c02289f0: e5853018 str r3, [r5, #24]
goto try_again;
c02289f4: eaffffb0 b c02288bc <udp_recvmsg+0x64>
c02289f8: e59b3004 ldr r3, [fp, #4]
c02289fc: e2433001 sub r3, r3, #1
c0228a00: e58b3004 str r3, [fp, #4]
c0228a04: ebfffffe bl 0 <local_bh_enable>
c0228a04: R_ARM_CALL local_bh_enable
c0228a08: eafffff5 b c02289e4 <udp_recvmsg+0x18c>
c0228a0c: e58d700c str r7, [sp, #12]
c0228a10: eaffffcd b c022894c <udp_recvmsg+0xf4>
asm volatile(
c0228a14: e10f1000 mrs r1, CPSR
c0228a18: e3813080 orr r3, r1, #128 ; 0x80
c0228a1c: e121f003 msr CPSR_c, r3
UDP_INC_STATS_USER(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
c0228a20: e59f3164 ldr r3, [pc, #356] ; c0228b8c <udp_recvmsg+0x334>
c0228a24: e5932098 ldr r2, [r3, #152] ; 0x98
c0228a28: e592300c ldr r3, [r2, #12]
c0228a2c: e2833001 add r3, r3, #1
c0228a30: e582300c str r3, [r2, #12]
asm volatile(
c0228a34: e121f001 msr CPSR_c, r1
c0228a38: eaffffe5 b c02289d4 <udp_recvmsg+0x17c>
return __skb_checksum_complete_head(skb, UDP_SKB_CB(skb)->cscov);
c0228a3c: e1a00004 mov r0, r4
c0228a40: e1d412bc ldrh r1, [r4, #44] ; 0x2c
c0228a44: ebfffffe bl 0 <__skb_checksum_complete_head>
c0228a44: R_ARM_CALL __skb_checksum_complete_head
return !skb_csum_unnecessary(skb) &&
c0228a48: e3500000 cmp r0, #0
c0228a4c: 1affffcb bne c0228980 <udp_recvmsg+0x128>
c0228a50: eaffffad b c022890c <udp_recvmsg+0xb4>
if (!peeked)
c0228a54: e59d301c ldr r3, [sp, #28]
c0228a58: e3530000 cmp r3, #0
c0228a5c: 1a00000b bne c0228a90 <udp_recvmsg+0x238>
UDP_INC_STATS_USER(sock_net(sk),
c0228a60: e59d3010 ldr r3, [sp, #16]
c0228a64: e3530000 cmp r3, #0
c0228a68: 0a00003d beq c0228b64 <udp_recvmsg+0x30c>
asm volatile(
c0228a6c: e10f1000 mrs r1, CPSR
c0228a70: e3813080 orr r3, r1, #128 ; 0x80
c0228a74: e121f003 msr CPSR_c, r3
c0228a78: e59f310c ldr r3, [pc, #268] ; c0228b8c <udp_recvmsg+0x334>
c0228a7c: e593209c ldr r2, [r3, #156] ; 0x9c
c0228a80: e5923004 ldr r3, [r2, #4]
c0228a84: e2833001 add r3, r3, #1
c0228a88: e5823004 str r3, [r2, #4]
asm volatile(
c0228a8c: e121f001 msr CPSR_c, r1
(1UL << SOCK_TIMESTAMPING_RX_SOFTWARE) | \
(1UL << SOCK_TIMESTAMPING_SOFTWARE) | \
(1UL << SOCK_TIMESTAMPING_RAW_HARDWARE) | \
(1UL << SOCK_TIMESTAMPING_SYS_HARDWARE))
if (sk->sk_flags & FLAGS_TS_OR_DROPS)
c0228a90: e596206c ldr r2, [r6, #108] ; 0x6c
c0228a94: e59f30f4 ldr r3, [pc, #244] ; c0228b90 <udp_recvmsg+0x338>
c0228a98: e0033002 and r3, r3, r2
c0228a9c: e3530000 cmp r3, #0
c0228aa0: 1a000024 bne c0228b38 <udp_recvmsg+0x2e0>
__sock_recv_ts_and_drops(msg, sk, skb);
else
sk->sk_stamp = skb->tstamp;
c0228aa4: e1c420d8 ldrd r2, [r4, #8]
c0228aa8: e2861e11 add r1, r6, #272 ; 0x110
c0228aac: e1c120f0 strd r2, [r1]
if (sin) {
c0228ab0: e59d2014 ldr r2, [sp, #20]
c0228ab4: e3520000 cmp r2, #0
c0228ab8: 0a00000d beq c0228af4 <udp_recvmsg+0x29c>
sin->sin_family = AF_INET;
c0228abc: e3a03002 mov r3, #2
c0228ac0: e1c230b0 strh r3, [r2]
sin->sin_port = udp_hdr(skb)->source;
c0228ac4: e594307c ldr r3, [r4, #124] ; 0x7c
memset(sin->sin_zero, 0, sizeof(sin->sin_zero));
c0228ac8: e2820008 add r0, r2, #8
sin->sin_port = udp_hdr(skb)->source;
c0228acc: e1d330b0 ldrh r3, [r3]
memset(sin->sin_zero, 0, sizeof(sin->sin_zero));
c0228ad0: e3a01008 mov r1, #8
sin->sin_port = udp_hdr(skb)->source;
c0228ad4: e1c230b2 strh r3, [r2, #2]
sin->sin_addr.s_addr = ip_hdr(skb)->saddr;
c0228ad8: e5943080 ldr r3, [r4, #128] ; 0x80
c0228adc: e593300c ldr r3, [r3, #12]
c0228ae0: e5823004 str r3, [r2, #4]
memset(sin->sin_zero, 0, sizeof(sin->sin_zero));
c0228ae4: ebfffffe bl 0 <__memzero>
c0228ae4: R_ARM_CALL __memzero
*addr_len = sizeof(*sin);
c0228ae8: e3a03010 mov r3, #16
c0228aec: e59d2058 ldr r2, [sp, #88] ; 0x58
c0228af0: e5823000 str r3, [r2]
if (inet->cmsg_flags)
c0228af4: e2863e16 add r3, r6, #352 ; 0x160
c0228af8: e1d330b2 ldrh r3, [r3, #2]
c0228afc: e3530000 cmp r3, #0
c0228b00: 1a000013 bne c0228b54 <udp_recvmsg+0x2fc>
err = copied;
c0228b04: e59d3054 ldr r3, [sp, #84] ; 0x54
c0228b08: e59dc00c ldr ip, [sp, #12]
c0228b0c: e3130020 tst r3, #32
c0228b10: 11a0c00b movne ip, fp
c0228b14: e58dc024 str ip, [sp, #36] ; 0x24
c0228b18: eaffff84 b c0228930 <udp_recvmsg+0xd8>
return ip_recv_error(sk, msg, len, addr_len);
c0228b1c: e1a00001 mov r0, r1
c0228b20: e1a02007 mov r2, r7
c0228b24: e1a01005 mov r1, r5
c0228b28: e59d3058 ldr r3, [sp, #88] ; 0x58
c0228b2c: ebfffffe bl 0 <ip_recv_error>
c0228b2c: R_ARM_CALL ip_recv_error
}
c0228b30: e28dd02c add sp, sp, #44 ; 0x2c
c0228b34: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
__sock_recv_ts_and_drops(msg, sk, skb);
c0228b38: e1a00005 mov r0, r5
c0228b3c: e1a01006 mov r1, r6
c0228b40: e1a02004 mov r2, r4
c0228b44: ebfffffe bl 0 <__sock_recv_ts_and_drops>
c0228b44: R_ARM_CALL __sock_recv_ts_and_drops
c0228b48: eaffffd8 b c0228ab0 <udp_recvmsg+0x258>
c0228b4c: e1a0b009 mov fp, r9
c0228b50: eaffff74 b c0228928 <udp_recvmsg+0xd0>
ip_cmsg_recv(msg, skb);
c0228b54: e1a00005 mov r0, r5
c0228b58: e1a01004 mov r1, r4
c0228b5c: ebfffffe bl 0 <ip_cmsg_recv>
c0228b5c: R_ARM_CALL ip_cmsg_recv
c0228b60: eaffffe7 b c0228b04 <udp_recvmsg+0x2ac>
asm volatile(
c0228b64: e10f1000 mrs r1, CPSR
c0228b68: e3813080 orr r3, r1, #128 ; 0x80
c0228b6c: e121f003 msr CPSR_c, r3
UDP_INC_STATS_USER(sock_net(sk),
c0228b70: e59f3014 ldr r3, [pc, #20] ; c0228b8c <udp_recvmsg+0x334>
c0228b74: e5932098 ldr r2, [r3, #152] ; 0x98
c0228b78: e5923004 ldr r3, [r2, #4]
c0228b7c: e2833001 add r3, r3, #1
c0228b80: e5823004 str r3, [r2, #4]
asm volatile(
c0228b84: e121f001 msr CPSR_c, r1
c0228b88: eaffffc0 b c0228a90 <udp_recvmsg+0x238>
c0228b8c: 00000000 .word 0x00000000
c0228b8c: R_ARM_ABS32 init_net
c0228b90: 00bc0800 .word 0x00bc0800
c0228b94 <udp_lib_unhash>:
if (sk_hashed(sk)) {
c0228b94: e5903024 ldr r3, [r0, #36] ; 0x24
c0228b98: e3530000 cmp r3, #0
c0228b9c: 012fff1e bxeq lr
{
c0228ba0: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr}
c0228ba4: e1a0200d mov r2, sp
struct udp_table *udptable = sk->sk_prot->h.udp_table;
c0228ba8: e590301c ldr r3, [r0, #28]
c0228bac: e3c25d7f bic r5, r2, #8128 ; 0x1fc0
c0228bb0: e5933090 ldr r3, [r3, #144] ; 0x90
c0228bb4: e1a04000 mov r4, r0
return &table->hash[udp_hashfn(net, num, table->mask)];
c0228bb8: e5936000 ldr r6, [r3]
c0228bbc: e5938008 ldr r8, [r3, #8]
return &table->hash2[hash & table->mask];
c0228bc0: e5939004 ldr r9, [r3, #4]
udp_sk(sk)->udp_port_hash);
c0228bc4: e1d070b8 ldrh r7, [r0, #8]
hslot2 = udp_hashslot2(udptable, udp_sk(sk)->udp_portaddr_hash);
c0228bc8: e1d0a0ba ldrh sl, [r0, #10]
raw_spin_lock_bh(&lock->rlock);
c0228bcc: ebfffffe bl 0 <local_bh_disable>
c0228bcc: R_ARM_CALL local_bh_disable
c0228bd0: e3c5203f bic r2, r5, #63 ; 0x3f
c0228bd4: e5923004 ldr r3, [r2, #4]
c0228bd8: e2833001 add r3, r3, #1
c0228bdc: e5823004 str r3, [r2, #4]
h->pprev = NULL;
}
static inline int hlist_unhashed(const struct hlist_node *h)
{
return !h->pprev;
c0228be0: e5943024 ldr r3, [r4, #36] ; 0x24
if (sk_hashed(sk)) {
c0228be4: e3530000 cmp r3, #0
c0228be8: 0a000034 beq c0228cc0 <udp_lib_unhash+0x12c>
struct hlist_nulls_node *next = n->next;
c0228bec: e5942020 ldr r2, [r4, #32]
if (!is_a_nulls(next))
c0228bf0: e3120001 tst r2, #1
*pprev = next;
c0228bf4: e5832000 str r2, [r3]
next->pprev = pprev;
c0228bf8: 05823004 streq r3, [r2, #4]
n->pprev = NULL;
c0228bfc: e3a02000 mov r2, #0
WARN_ON(atomic_read(&sk->sk_refcnt) == 1);
c0228c00: e594302c ldr r3, [r4, #44] ; 0x2c
c0228c04: e5842024 str r2, [r4, #36] ; 0x24
c0228c08: e3530001 cmp r3, #1
c0228c0c: 0a000033 beq c0228ce0 <udp_lib_unhash+0x14c>
#define UDP_HTABLE_SIZE_MIN (CONFIG_BASE_SMALL ? 128 : 256)
static inline int udp_hashfn(struct net *net, unsigned num, unsigned mask)
{
return (num + net_hash_mix(net)) & mask;
c0228c10: e0077008 and r7, r7, r8
return &table->hash[udp_hashfn(net, num, table->mask)];
c0228c14: e0866187 add r6, r6, r7, lsl #3
asm volatile(
c0228c18: e10f2000 mrs r2, CPSR
c0228c1c: e3823080 orr r3, r2, #128 ; 0x80
c0228c20: e121f003 msr CPSR_c, r3
val = v->counter;
c0228c24: e594302c ldr r3, [r4, #44] ; 0x2c
v->counter = val -= i;
c0228c28: e2433001 sub r3, r3, #1
c0228c2c: e584302c str r3, [r4, #44] ; 0x2c
asm volatile(
c0228c30: e121f002 msr CPSR_c, r2
inet_sk(sk)->inet_num = 0;
c0228c34: e3a01000 mov r1, #0
hslot->count--;
c0228c38: e5962004 ldr r2, [r6, #4]
inet_sk(sk)->inet_num = 0;
c0228c3c: e2843f56 add r3, r4, #344 ; 0x158
hslot->count--;
c0228c40: e2422001 sub r2, r2, #1
c0228c44: e5862004 str r2, [r6, #4]
inet_sk(sk)->inet_num = 0;
c0228c48: e1c310b2 strh r1, [r3, #2]
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, -1);
c0228c4c: e594101c ldr r1, [r4, #28]
c0228c50: e59f0098 ldr r0, [pc, #152] ; c0228cf0 <udp_lib_unhash+0x15c>
c0228c54: e3e02000 mvn r2, #0
c0228c58: ebfffffe bl 0 <sock_prot_inuse_add>
c0228c58: R_ARM_CALL sock_prot_inuse_add
c0228c5c: e3c5203f bic r2, r5, #63 ; 0x3f
raw_spin_lock(&lock->rlock);
c0228c60: e5923004 ldr r3, [r2, #4]
c0228c64: e2833001 add r3, r3, #1
c0228c68: e5823004 str r3, [r2, #4]
return !h->pprev;
c0228c6c: e5943018 ldr r3, [r4, #24]
if (!hlist_nulls_unhashed(n)) {
c0228c70: e3530000 cmp r3, #0
c0228c74: 0a000005 beq c0228c90 <udp_lib_unhash+0xfc>
struct hlist_nulls_node *next = n->next;
c0228c78: e5942014 ldr r2, [r4, #20]
if (!is_a_nulls(next))
c0228c7c: e3120001 tst r2, #1
*pprev = next;
c0228c80: e5832000 str r2, [r3]
next->pprev = pprev;
c0228c84: 05823004 streq r3, [r2, #4]
n->pprev = NULL;
c0228c88: e3a03000 mov r3, #0
c0228c8c: e5843018 str r3, [r4, #24]
return &table->hash2[hash & table->mask];
c0228c90: e008800a and r8, r8, sl
c0228c94: e0898188 add r8, r9, r8, lsl #3
hslot2->count--;
c0228c98: e5983004 ldr r3, [r8, #4]
c0228c9c: e2433001 sub r3, r3, #1
c0228ca0: e5883004 str r3, [r8, #4]
c0228ca4: e3c5303f bic r3, r5, #63 ; 0x3f
raw_spin_unlock(&lock->rlock);
c0228ca8: e5932004 ldr r2, [r3, #4]
c0228cac: e2422001 sub r2, r2, #1
c0228cb0: e5832004 str r2, [r3, #4]
c0228cb4: e5933000 ldr r3, [r3]
c0228cb8: e3130002 tst r3, #2
c0228cbc: 1a000005 bne c0228cd8 <udp_lib_unhash+0x144>
c0228cc0: e3c5503f bic r5, r5, #63 ; 0x3f
raw_spin_unlock_bh(&lock->rlock);
c0228cc4: e5953004 ldr r3, [r5, #4]
c0228cc8: e2433001 sub r3, r3, #1
c0228ccc: e5853004 str r3, [r5, #4]
}
c0228cd0: e8bd47f0 pop {r4, r5, r6, r7, r8, r9, sl, lr}
c0228cd4: eafffffe b 0 <local_bh_enable>
c0228cd4: R_ARM_JUMP24 local_bh_enable
raw_spin_unlock(&lock->rlock);
c0228cd8: ebfffffe bl 0 <preempt_schedule>
c0228cd8: R_ARM_CALL preempt_schedule
c0228cdc: eafffff7 b c0228cc0 <udp_lib_unhash+0x12c>
c0228ce0: e59f000c ldr r0, [pc, #12] ; c0228cf4 <udp_lib_unhash+0x160>
c0228ce4: e3a01f85 mov r1, #532 ; 0x214
c0228ce8: ebfffffe bl 0 <warn_slowpath_null>
c0228ce8: R_ARM_CALL warn_slowpath_null
c0228cec: eaffffc7 b c0228c10 <udp_lib_unhash+0x7c>
...
c0228cf0: R_ARM_ABS32 init_net
c0228cf4: R_ARM_ABS32 .rodata.str1.4
c0228cf8 <__udp_queue_rcv_skb>:
{
c0228cf8: e92d4038 push {r3, r4, r5, lr}
c0228cfc: e1a05000 mov r5, r0
c0228d00: e1a04001 mov r4, r1
rc = sock_queue_rcv_skb(sk, skb);
c0228d04: ebfffffe bl 0 <sock_queue_rcv_skb>
c0228d04: R_ARM_CALL sock_queue_rcv_skb
if (rc < 0) {
c0228d08: e3500000 cmp r0, #0
c0228d0c: ba000001 blt c0228d18 <__udp_queue_rcv_skb+0x20>
return 0;
c0228d10: e3a00000 mov r0, #0
}
c0228d14: e8bd8038 pop {r3, r4, r5, pc}
if (rc == -ENOMEM)
c0228d18: e370000c cmn r0, #12
int is_udplite = IS_UDPLITE(sk);
c0228d1c: e5d531f8 ldrb r3, [r5, #504] ; 0x1f8
if (rc == -ENOMEM)
c0228d20: 0a000013 beq c0228d74 <__udp_queue_rcv_skb+0x7c>
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
c0228d24: e3530000 cmp r3, #0
c0228d28: e59f3064 ldr r3, [pc, #100] ; c0228d94 <__udp_queue_rcv_skb+0x9c>
c0228d2c: 0a00000b beq c0228d60 <__udp_queue_rcv_skb+0x68>
c0228d30: e593209c ldr r2, [r3, #156] ; 0x9c
c0228d34: e592300c ldr r3, [r2, #12]
c0228d38: e2833001 add r3, r3, #1
c0228d3c: e582300c str r3, [r2, #12]
kfree_skb(skb);
c0228d40: e1a00004 mov r0, r4
c0228d44: ebfffffe bl 0 <kfree_skb>
c0228d44: R_ARM_CALL kfree_skb
return -1;
c0228d48: e3e00000 mvn r0, #0
c0228d4c: e8bd8038 pop {r3, r4, r5, pc}
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS,
c0228d50: e5931098 ldr r1, [r3, #152] ; 0x98
c0228d54: e5912014 ldr r2, [r1, #20]
c0228d58: e2822001 add r2, r2, #1
c0228d5c: e5812014 str r2, [r1, #20]
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
c0228d60: e5932098 ldr r2, [r3, #152] ; 0x98
c0228d64: e592300c ldr r3, [r2, #12]
c0228d68: e2833001 add r3, r3, #1
c0228d6c: e582300c str r3, [r2, #12]
c0228d70: eafffff2 b c0228d40 <__udp_queue_rcv_skb+0x48>
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS,
c0228d74: e3530000 cmp r3, #0
c0228d78: e59f3014 ldr r3, [pc, #20] ; c0228d94 <__udp_queue_rcv_skb+0x9c>
c0228d7c: 0afffff3 beq c0228d50 <__udp_queue_rcv_skb+0x58>
c0228d80: e593109c ldr r1, [r3, #156] ; 0x9c
c0228d84: e5912014 ldr r2, [r1, #20]
c0228d88: e2822001 add r2, r2, #1
c0228d8c: e5812014 str r2, [r1, #20]
c0228d90: eaffffe6 b c0228d30 <__udp_queue_rcv_skb+0x38>
c0228d94: 00000000 .word 0x00000000
c0228d94: R_ARM_ABS32 init_net
c0228d98 <udp_lib_getsockopt>:
{
c0228d98: e92d4070 push {r4, r5, r6, lr}
c0228d9c: e24dd008 sub sp, sp, #8
c0228da0: e1a0100d mov r1, sp
c0228da4: e3c1cd7f bic ip, r1, #8128 ; 0x1fc0
c0228da8: e3cc103f bic r1, ip, #63 ; 0x3f
if (get_user(len, optlen))
c0228dac: e5911008 ldr r1, [r1, #8]
{
c0228db0: e1a06000 mov r6, r0
c0228db4: e1a05002 mov r5, r2
if (get_user(len, optlen))
c0228db8: e2411001 sub r1, r1, #1
c0228dbc: e59d0018 ldr r0, [sp, #24]
c0228dc0: ebfffffe bl 0 <__get_user_4>
c0228dc0: R_ARM_CALL __get_user_4
c0228dc4: e3500000 cmp r0, #0
c0228dc8: 1a000035 bne c0228ea4 <udp_lib_getsockopt+0x10c>
len = min_t(unsigned int, len, sizeof(int));
c0228dcc: e3520004 cmp r2, #4
c0228dd0: 31a04002 movcc r4, r2
c0228dd4: 23a04004 movcs r4, #4
switch (optname) {
c0228dd8: e355000a cmp r5, #10
c0228ddc: 0a00002c beq c0228e94 <udp_lib_getsockopt+0xfc>
c0228de0: da000007 ble c0228e04 <udp_lib_getsockopt+0x6c>
c0228de4: e355000b cmp r5, #11
c0228de8: 0a000025 beq c0228e84 <udp_lib_getsockopt+0xec>
c0228dec: e3550064 cmp r5, #100 ; 0x64
c0228df0: 1a00001a bne c0228e60 <udp_lib_getsockopt+0xc8>
val = up->encap_type;
c0228df4: e2866e1f add r6, r6, #496 ; 0x1f0
c0228df8: e1d620b0 ldrh r2, [r6]
c0228dfc: e58d2004 str r2, [sp, #4]
break;
c0228e00: ea000003 b c0228e14 <udp_lib_getsockopt+0x7c>
switch (optname) {
c0228e04: e3550001 cmp r5, #1
c0228e08: 1a000014 bne c0228e60 <udp_lib_getsockopt+0xc8>
val = up->corkflag;
c0228e0c: e59621ec ldr r2, [r6, #492] ; 0x1ec
c0228e10: e58d2004 str r2, [sp, #4]
c0228e14: e3ccc03f bic ip, ip, #63 ; 0x3f
if (put_user(len, optlen))
c0228e18: e59c5008 ldr r5, [ip, #8]
c0228e1c: e1a02004 mov r2, r4
c0228e20: e2451001 sub r1, r5, #1
c0228e24: e59d0018 ldr r0, [sp, #24]
c0228e28: ebfffffe bl 0 <__put_user_4>
c0228e28: R_ARM_CALL __put_user_4
c0228e2c: e2506000 subs r6, r0, #0
c0228e30: 1a00001b bne c0228ea4 <udp_lib_getsockopt+0x10c>
return n;
}
static inline unsigned long __must_check copy_to_user(void __user *to, const void *from, unsigned long n)
{
if (access_ok(VERIFY_WRITE, to, n))
c0228e34: e1a01005 mov r1, r5
c0228e38: e0930004 adds r0, r3, r4
c0228e3c: 30d00001 sbcscc r0, r0, r1
c0228e40: 33a01000 movcc r1, #0
c0228e44: e3510000 cmp r1, #0
c0228e48: 0a000008 beq c0228e70 <udp_lib_getsockopt+0xd8>
if (copy_to_user(optval, &val, len))
c0228e4c: e3540000 cmp r4, #0
c0228e50: 1a000013 bne c0228ea4 <udp_lib_getsockopt+0x10c>
}
c0228e54: e1a00006 mov r0, r6
c0228e58: e28dd008 add sp, sp, #8
c0228e5c: e8bd8070 pop {r4, r5, r6, pc}
return -ENOPROTOOPT;
c0228e60: e3e0605b mvn r6, #91 ; 0x5b
}
c0228e64: e1a00006 mov r0, r6
c0228e68: e28dd008 add sp, sp, #8
c0228e6c: e8bd8070 pop {r4, r5, r6, pc}
c0228e70: e1a00003 mov r0, r3
n = __copy_to_user(to, from, n);
c0228e74: e28d1004 add r1, sp, #4
c0228e78: ebfffffe bl 0 <__copy_to_user>
c0228e78: R_ARM_CALL __copy_to_user
c0228e7c: e1a04000 mov r4, r0
c0228e80: eafffff1 b c0228e4c <udp_lib_getsockopt+0xb4>
val = up->pcrlen;
c0228e84: e2866f7d add r6, r6, #500 ; 0x1f4
c0228e88: e1d620b2 ldrh r2, [r6, #2]
c0228e8c: e58d2004 str r2, [sp, #4]
break;
c0228e90: eaffffdf b c0228e14 <udp_lib_getsockopt+0x7c>
val = up->pcslen;
c0228e94: e2866f7d add r6, r6, #500 ; 0x1f4
c0228e98: e1d620b0 ldrh r2, [r6]
c0228e9c: e58d2004 str r2, [sp, #4]
break;
c0228ea0: eaffffdb b c0228e14 <udp_lib_getsockopt+0x7c>
return -EFAULT;
c0228ea4: e3e0600d mvn r6, #13
c0228ea8: eaffffe9 b c0228e54 <udp_lib_getsockopt+0xbc>
c0228eac <udp_getsockopt>:
if (level == SOL_UDP || level == SOL_UDPLITE)
c0228eac: e3510011 cmp r1, #17
c0228eb0: 13510088 cmpne r1, #136 ; 0x88
{
c0228eb4: e59dc000 ldr ip, [sp]
if (level == SOL_UDP || level == SOL_UDPLITE)
c0228eb8: 0a000001 beq c0228ec4 <udp_getsockopt+0x18>
return ip_getsockopt(sk, level, optname, optval, optlen);
c0228ebc: e58dc000 str ip, [sp]
c0228ec0: eafffffe b 0 <ip_getsockopt>
c0228ec0: R_ARM_JUMP24 ip_getsockopt
return udp_lib_getsockopt(sk, level, optname, optval, optlen);
c0228ec4: eafffffe b c0228d98 <udp_lib_getsockopt>
c0228ec4: R_ARM_JUMP24 udp_lib_getsockopt
c0228ec8 <udp_poll>:
{
c0228ec8: e92d4070 push {r4, r5, r6, lr}
c0228ecc: e1a05001 mov r5, r1
c0228ed0: e1a06000 mov r6, r0
unsigned int mask = datagram_poll(file, sock, wait);
c0228ed4: ebfffffe bl 0 <datagram_poll>
c0228ed4: R_ARM_CALL datagram_poll
if ((mask & POLLRDNORM) && !(file->f_flags & O_NONBLOCK) &&
c0228ed8: e3100040 tst r0, #64 ; 0x40
unsigned int mask = datagram_poll(file, sock, wait);
c0228edc: e1a04000 mov r4, r0
struct sock *sk = sock->sk;
c0228ee0: e5950014 ldr r0, [r5, #20]
if ((mask & POLLRDNORM) && !(file->f_flags & O_NONBLOCK) &&
c0228ee4: 0a000005 beq c0228f00 <udp_poll+0x38>
c0228ee8: e5963018 ldr r3, [r6, #24]
c0228eec: e3130b02 tst r3, #2048 ; 0x800
c0228ef0: 1a000002 bne c0228f00 <udp_poll+0x38>
!(sk->sk_shutdown & RCV_SHUTDOWN) && !first_packet_length(sk))
c0228ef4: e5d0308c ldrb r3, [r0, #140] ; 0x8c
if ((mask & POLLRDNORM) && !(file->f_flags & O_NONBLOCK) &&
c0228ef8: e3130001 tst r3, #1
c0228efc: 0a000001 beq c0228f08 <udp_poll+0x40>
}
c0228f00: e1a00004 mov r0, r4
c0228f04: e8bd8070 pop {r4, r5, r6, pc}
!(sk->sk_shutdown & RCV_SHUTDOWN) && !first_packet_length(sk))
c0228f08: ebfffdcf bl c022864c <first_packet_length>
c0228f0c: e3500000 cmp r0, #0
mask &= ~(POLLIN | POLLRDNORM);
c0228f10: 03c44041 biceq r4, r4, #65 ; 0x41
}
c0228f14: e1a00004 mov r0, r4
c0228f18: e8bd8070 pop {r4, r5, r6, pc}
c0228f1c <udp_seq_open>:
if (state->bucket <= state->udp_table->mask)
spin_unlock_bh(&state->udp_table->hash[state->bucket].lock);
}
int udp_seq_open(struct inode *inode, struct file *file)
{
c0228f1c: e92d4038 push {r3, r4, r5, lr}
struct udp_seq_afinfo *afinfo = PDE(inode)->data;
c0228f20: e5102014 ldr r2, [r0, #-20] ; 0xffffffec
struct udp_iter_state *s;
int err;
err = seq_open_net(inode, file, &afinfo->seq_ops,
c0228f24: e3a0300c mov r3, #12
struct udp_seq_afinfo *afinfo = PDE(inode)->data;
c0228f28: e592402c ldr r4, [r2, #44] ; 0x2c
{
c0228f2c: e1a05001 mov r5, r1
err = seq_open_net(inode, file, &afinfo->seq_ops,
c0228f30: e2842010 add r2, r4, #16
c0228f34: ebfffffe bl 0 <seq_open_net>
c0228f34: R_ARM_CALL seq_open_net
sizeof(struct udp_iter_state));
if (err < 0)
c0228f38: e3500000 cmp r0, #0
c0228f3c: b8bd8038 poplt {r3, r4, r5, pc}
return err;
s = ((struct seq_file *)file->private_data)->private;
c0228f40: e5953068 ldr r3, [r5, #104] ; 0x68
s->family = afinfo->family;
c0228f44: e1d420b4 ldrh r2, [r4, #4]
s = ((struct seq_file *)file->private_data)->private;
c0228f48: e593303c ldr r3, [r3, #60] ; 0x3c
s->family = afinfo->family;
c0228f4c: e1c320b0 strh r2, [r3]
s->udp_table = afinfo->udp_table;
c0228f50: e5942008 ldr r2, [r4, #8]
c0228f54: e5832008 str r2, [r3, #8]
return err;
}
c0228f58: e8bd8038 pop {r3, r4, r5, pc}
c0228f5c <udp_proc_register>:
EXPORT_SYMBOL(udp_seq_open);
/* ------------------------------------------------------------------------ */
int udp_proc_register(struct net *net, struct udp_seq_afinfo *afinfo)
{
c0228f5c: e52de004 push {lr} ; (str lr, [sp, #-4]!)
struct proc_dir_entry *p;
int rc = 0;
afinfo->seq_ops.start = udp_seq_start;
c0228f60: e59fc040 ldr ip, [pc, #64] ; c0228fa8 <udp_proc_register+0x4c>
afinfo->seq_ops.next = udp_seq_next;
c0228f64: e59f2040 ldr r2, [pc, #64] ; c0228fac <udp_proc_register+0x50>
afinfo->seq_ops.stop = udp_seq_stop;
c0228f68: e59f3040 ldr r3, [pc, #64] ; c0228fb0 <udp_proc_register+0x54>
afinfo->seq_ops.start = udp_seq_start;
c0228f6c: e581c010 str ip, [r1, #16]
afinfo->seq_ops.stop = udp_seq_stop;
c0228f70: e5813014 str r3, [r1, #20]
afinfo->seq_ops.next = udp_seq_next;
c0228f74: e5812018 str r2, [r1, #24]
{
c0228f78: e24dd00c sub sp, sp, #12
p = proc_create_data(afinfo->name, S_IRUGO, net->proc_net,
c0228f7c: e5902020 ldr r2, [r0, #32]
c0228f80: e591300c ldr r3, [r1, #12]
c0228f84: e5910000 ldr r0, [r1]
c0228f88: e58d1000 str r1, [sp]
c0228f8c: e3a01f49 mov r1, #292 ; 0x124
c0228f90: ebfffffe bl 0 <proc_create_data>
c0228f90: R_ARM_CALL proc_create_data
afinfo->seq_fops, afinfo);
if (!p)
c0228f94: e3500000 cmp r0, #0
rc = -ENOMEM;
return rc;
}
c0228f98: 03e0000b mvneq r0, #11
c0228f9c: 13a00000 movne r0, #0
c0228fa0: e28dd00c add sp, sp, #12
c0228fa4: e49df004 pop {pc} ; (ldr pc, [sp], #4)
...
c0228fa8: R_ARM_ABS32 udp_seq_start
c0228fac: R_ARM_ABS32 udp_seq_next
c0228fb0: R_ARM_ABS32 udp_seq_stop
c0228fb4 <udp_proc_unregister>:
EXPORT_SYMBOL(udp_proc_register);
void udp_proc_unregister(struct net *net, struct udp_seq_afinfo *afinfo)
{
proc_net_remove(net, afinfo->name);
c0228fb4: e5911000 ldr r1, [r1]
c0228fb8: eafffffe b 0 <proc_net_remove>
c0228fb8: R_ARM_JUMP24 proc_net_remove
c0228fbc <udp_seq_stop>:
struct udp_iter_state *state = seq->private;
c0228fbc: e590303c ldr r3, [r0, #60] ; 0x3c
if (state->bucket <= state->udp_table->mask)
c0228fc0: e5931008 ldr r1, [r3, #8]
c0228fc4: e5932004 ldr r2, [r3, #4]
c0228fc8: e5913008 ldr r3, [r1, #8]
c0228fcc: e1520003 cmp r2, r3
c0228fd0: 812fff1e bxhi lr
c0228fd4: e1a0300d mov r3, sp
c0228fd8: e3c33d7f bic r3, r3, #8128 ; 0x1fc0
c0228fdc: e3c3303f bic r3, r3, #63 ; 0x3f
raw_spin_unlock_bh(&lock->rlock);
c0228fe0: e5932004 ldr r2, [r3, #4]
c0228fe4: e2422001 sub r2, r2, #1
c0228fe8: e5832004 str r2, [r3, #4]
c0228fec: eafffffe b 0 <local_bh_enable>
c0228fec: R_ARM_JUMP24 local_bh_enable
c0228ff0 <udp_sendmsg>:
struct rtable *rt = NULL;
c0228ff0: e3a00000 mov r0, #0
{
c0228ff4: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
int corkreq = up->corkflag || msg->msg_flags&MSG_MORE;
c0228ff8: e591c1ec ldr ip, [r1, #492] ; 0x1ec
{
c0228ffc: e24dd0b4 sub sp, sp, #180 ; 0xb4
int corkreq = up->corkflag || msg->msg_flags&MSG_MORE;
c0229000: e15c0000 cmp ip, r0
struct rtable *rt = NULL;
c0229004: e58d003c str r0, [sp, #60] ; 0x3c
int corkreq = up->corkflag || msg->msg_flags&MSG_MORE;
c0229008: 13a00001 movne r0, #1
c022900c: 05928018 ldreq r8, [r2, #24]
int err, is_udplite = IS_UDPLITE(sk);
c0229010: e5d191f8 ldrb r9, [r1, #504] ; 0x1f8
int corkreq = up->corkflag || msg->msg_flags&MSG_MORE;
c0229014: 01a087a8 lsreq r8, r8, #15
c0229018: 02080001 andeq r0, r8, #1
if (len > 0xFFFF)
c022901c: e3530801 cmp r3, #65536 ; 0x10000
int corkreq = up->corkflag || msg->msg_flags&MSG_MORE;
c0229020: e58d0018 str r0, [sp, #24]
if (len > 0xFFFF)
c0229024: 2a00018e bcs c0229664 <udp_sendmsg+0x674>
if (msg->msg_flags & MSG_OOB) /* Mirror BSD error message compatibility */
c0229028: e592a018 ldr sl, [r2, #24]
c022902c: e21aa001 ands sl, sl, #1
c0229030: 1a00018d bne c022966c <udp_sendmsg+0x67c>
c0229034: e1a04001 mov r4, r1
c0229038: e1a05002 mov r5, r2
getfrag = is_udplite ? udplite_getfrag : ip_generic_getfrag;
c022903c: e59f2724 ldr r2, [pc, #1828] ; c0229768 <udp_sendmsg+0x778>
c0229040: e3590000 cmp r9, #0
c0229044: e59f1720 ldr r1, [pc, #1824] ; c022976c <udp_sendmsg+0x77c>
c0229048: 01a01002 moveq r1, r2
c022904c: e1a07003 mov r7, r3
if (up->pending) {
c0229050: e59431e8 ldr r3, [r4, #488] ; 0x1e8
getfrag = is_udplite ? udplite_getfrag : ip_generic_getfrag;
c0229054: e58d101c str r1, [sp, #28]
if (up->pending) {
c0229058: e3530000 cmp r3, #0
ipc.opt = NULL;
c022905c: e58da048 str sl, [sp, #72] ; 0x48
ipc.tx_flags = 0;
c0229060: e5cda04c strb sl, [sp, #76] ; 0x4c
fl4 = &inet->cork.fl.u.ip4;
c0229064: e284bf6a add fp, r4, #424 ; 0x1a8
if (up->pending) {
c0229068: 1a0000a2 bne c02292f8 <udp_sendmsg+0x308>
if (msg->msg_name) {
c022906c: e5953000 ldr r3, [r5]
c0229070: e3530000 cmp r3, #0
c0229074: 0a00010b beq c02294a8 <udp_sendmsg+0x4b8>
if (msg->msg_namelen < sizeof(*usin))
c0229078: e5952004 ldr r2, [r5, #4]
c022907c: e352000f cmp r2, #15
c0229080: 9a000124 bls c0229518 <udp_sendmsg+0x528>
if (usin->sin_family != AF_UNSPEC)
c0229084: e1d360b0 ldrh r6, [r3]
c0229088: e3c66002 bic r6, r6, #2
c022908c: e3560000 cmp r6, #0
c0229090: 1a00017e bne c0229690 <udp_sendmsg+0x6a0>
dport = usin->sin_port;
c0229094: e1d320b2 ldrh r2, [r3, #2]
daddr = usin->sin_addr.s_addr;
c0229098: e593a004 ldr sl, [r3, #4]
if (dport == 0)
c022909c: e3520000 cmp r2, #0
dport = usin->sin_port;
c02290a0: e58d2028 str r2, [sp, #40] ; 0x28
if (dport == 0)
c02290a4: 0a00011b beq c0229518 <udp_sendmsg+0x528>
ipc.oif = sk->sk_bound_dev_if;
c02290a8: e5943010 ldr r3, [r4, #16]
ipc.addr = inet->inet_saddr;
c02290ac: e594215c ldr r2, [r4, #348] ; 0x15c
err = sock_tx_timestamp(sk, &ipc.tx_flags);
c02290b0: e1a00004 mov r0, r4
c02290b4: e28d104c add r1, sp, #76 ; 0x4c
ipc.oif = sk->sk_bound_dev_if;
c02290b8: e58d3044 str r3, [sp, #68] ; 0x44
ipc.addr = inet->inet_saddr;
c02290bc: e58d2040 str r2, [sp, #64] ; 0x40
err = sock_tx_timestamp(sk, &ipc.tx_flags);
c02290c0: ebfffffe bl 0 <sock_tx_timestamp>
c02290c0: R_ARM_CALL sock_tx_timestamp
c02290c4: e28d3040 add r3, sp, #64 ; 0x40
if (err)
c02290c8: e2508000 subs r8, r0, #0
err = sock_tx_timestamp(sk, &ipc.tx_flags);
c02290cc: e58d3020 str r3, [sp, #32]
if (err)
c02290d0: 1a000085 bne c02292ec <udp_sendmsg+0x2fc>
if (msg->msg_controllen) {
c02290d4: e5952014 ldr r2, [r5, #20]
c02290d8: e3520000 cmp r2, #0
c02290dc: 1a0000e5 bne c0229478 <udp_sendmsg+0x488>
c02290e0: e59d1048 ldr r1, [sp, #72] ; 0x48
int free = 0;
c02290e4: e58d8024 str r8, [sp, #36] ; 0x24
if (!ipc.opt) {
c02290e8: e3510000 cmp r1, #0
saddr = ipc.addr;
c02290ec: 159d3040 ldrne r3, [sp, #64] ; 0x40
ipc.addr = faddr = daddr;
c02290f0: 158da040 strne sl, [sp, #64] ; 0x40
if (!ipc.opt) {
c02290f4: 0a000167 beq c0229698 <udp_sendmsg+0x6a8>
if (ipc.opt && ipc.opt->opt.srr) {
c02290f8: e5d12011 ldrb r2, [r1, #17]
c02290fc: e3520000 cmp r2, #0
c0229100: 1a0000a0 bne c0229388 <udp_sendmsg+0x398>
c0229104: e58da02c str sl, [sp, #44] ; 0x2c
c0229108: e594006c ldr r0, [r4, #108] ; 0x6c
tos = RT_TOS(inet->tos);
c022910c: e5d4216c ldrb r2, [r4, #364] ; 0x16c
if (sock_flag(sk, SOCK_LOCALROUTE) ||
c0229110: e3100a02 tst r0, #8192 ; 0x2000
tos = RT_TOS(inet->tos);
c0229114: e202201e and r2, r2, #30
if (sock_flag(sk, SOCK_LOCALROUTE) ||
c0229118: 1a0000a0 bne c02293a0 <udp_sendmsg+0x3b0>
(msg->msg_flags & MSG_DONTROUTE) ||
c022911c: e5950018 ldr r0, [r5, #24]
if (sock_flag(sk, SOCK_LOCALROUTE) ||
c0229120: e3100004 tst r0, #4
c0229124: 1a00009d bne c02293a0 <udp_sendmsg+0x3b0>
(msg->msg_flags & MSG_DONTROUTE) ||
c0229128: e3510000 cmp r1, #0
c022912c: 0a000002 beq c022913c <udp_sendmsg+0x14c>
(ipc.opt && ipc.opt->opt.is_strictroute)) {
c0229130: e5d11014 ldrb r1, [r1, #20]
c0229134: e3110001 tst r1, #1
c0229138: 1a000098 bne c02293a0 <udp_sendmsg+0x3b0>
return (addr & htonl(0xff000000)) == htonl(0x7f000000);
}
static inline bool ipv4_is_multicast(__be32 addr)
{
return (addr & htonl(0xf0000000)) == htonl(0xe0000000);
c022913c: e20a10f0 and r1, sl, #240 ; 0xf0
if (ipv4_is_multicast(daddr)) {
c0229140: e35100e0 cmp r1, #224 ; 0xe0
if (!ipc.oif)
c0229144: e59d1044 ldr r1, [sp, #68] ; 0x44
if (ipv4_is_multicast(daddr)) {
c0229148: 0a0000ea beq c02294f8 <udp_sendmsg+0x508>
} else if (!ipc.oif)
c022914c: e3510000 cmp r1, #0
ipc.oif = inet->uc_index;
c0229150: 05941174 ldreq r1, [r4, #372] ; 0x174
c0229154: 058d1044 streq r1, [sp, #68] ; 0x44
if (connected)
c0229158: e3560000 cmp r6, #0
c022915c: 1a0000da bne c02294cc <udp_sendmsg+0x4dc>
c0229160: e59d103c ldr r1, [sp, #60] ; 0x3c
if (rt == NULL) {
c0229164: e3510000 cmp r1, #0
fl4 = &inet->cork.fl.u.ip4;
c0229168: 11a0600b movne r6, fp
if (rt == NULL) {
c022916c: 0a0000f0 beq c0229534 <udp_sendmsg+0x544>
if (msg->msg_flags&MSG_CONFIRM)
c0229170: e5952018 ldr r2, [r5, #24]
c0229174: e3120b02 tst r2, #2048 ; 0x800
c0229178: 0a00008b beq c02293ac <udp_sendmsg+0x3bc>
dst_confirm(&rt->dst);
c022917c: e59d103c ldr r1, [sp, #60] ; 0x3c
dst_free(dst);
}
static inline void dst_confirm(struct dst_entry *dst)
{
if (dst) {
c0229180: e3510000 cmp r1, #0
c0229184: e58d102c str r1, [sp, #44] ; 0x2c
c0229188: 0a000008 beq c02291b0 <udp_sendmsg+0x1c0>
* block, but only when acquiring spinlocks that are subject to priority
* inheritance.
*/
static inline void rcu_read_lock(void)
{
__rcu_read_lock();
c022918c: ebfffffe bl 0 <__rcu_read_lock>
c022918c: R_ARM_CALL __rcu_read_lock
return rcu_dereference(dst->_neighbour);
c0229190: e59d102c ldr r1, [sp, #44] ; 0x2c
c0229194: e5912020 ldr r2, [r1, #32]
#define neigh_hold(n) atomic_inc(&(n)->refcnt)
static inline void neigh_confirm(struct neighbour *neigh)
{
if (neigh)
c0229198: e3520000 cmp r2, #0
neigh->confirmed = jiffies;
c022919c: 159f15cc ldrne r1, [pc, #1484] ; c0229770 <udp_sendmsg+0x780>
c02291a0: 15911000 ldrne r1, [r1]
c02291a4: 1582100c strne r1, [r2, #12]
{
rcu_lockdep_assert(!rcu_is_cpu_idle(),
"rcu_read_unlock() used illegally while idle");
rcu_lock_release(&rcu_lock_map);
__release(RCU);
__rcu_read_unlock();
c02291a8: ebfffffe bl 0 <__rcu_read_unlock>
c02291a8: R_ARM_CALL __rcu_read_unlock
c02291ac: e5952018 ldr r2, [r5, #24]
if (!(msg->msg_flags&MSG_PROBE) || len)
c02291b0: e1a01222 lsr r1, r2, #4
c02291b4: e2211001 eor r1, r1, #1
c02291b8: e3570000 cmp r7, #0
c02291bc: 13811001 orrne r1, r1, #1
c02291c0: e3110001 tst r1, #1
c02291c4: 1a000078 bne c02293ac <udp_sendmsg+0x3bc>
c02291c8: e59d003c ldr r0, [sp, #60] ; 0x3c
c02291cc: ea00002c b c0229284 <udp_sendmsg+0x294>
lock_sock_nested(sk, 0);
c02291d0: e1a00004 mov r0, r4
c02291d4: e3a01000 mov r1, #0
c02291d8: e58d3018 str r3, [sp, #24]
c02291dc: ebfffffe bl 0 <lock_sock_nested>
c02291dc: R_ARM_CALL lock_sock_nested
if (unlikely(up->pending)) {
c02291e0: e59421e8 ldr r2, [r4, #488] ; 0x1e8
c02291e4: e59d3018 ldr r3, [sp, #24]
c02291e8: e3520000 cmp r2, #0
c02291ec: 1a00013a bne c02296dc <udp_sendmsg+0x6ec>
up->pending = AF_INET;
c02291f0: e3a02002 mov r2, #2
fl4->fl4_dport = dport;
c02291f4: e1dd12b8 ldrh r1, [sp, #40] ; 0x28
fl4->saddr = saddr;
c02291f8: e58431bc str r3, [r4, #444] ; 0x1bc
fl4->daddr = daddr;
c02291fc: e584a1c0 str sl, [r4, #448] ; 0x1c0
fl4->fl4_sport = inet->inet_sport;
c0229200: e2843f59 add r3, r4, #356 ; 0x164
fl4->fl4_dport = dport;
c0229204: e1cb11bc strh r1, [fp, #28]
fl4->fl4_sport = inet->inet_sport;
c0229208: e1d330b0 ldrh r3, [r3]
up->len += ulen;
c022920c: e2846e1f add r6, r4, #496 ; 0x1f0
fl4->fl4_sport = inet->inet_sport;
c0229210: e1cb31be strh r3, [fp, #30]
up->pending = AF_INET;
c0229214: e58421e8 str r2, [r4, #488] ; 0x1e8
up->len += ulen;
c0229218: e1d630b2 ldrh r3, [r6, #2]
c022921c: e0883003 add r3, r8, r3
c0229220: e1c630b2 strh r3, [r6, #2]
err = ip_append_data(sk, fl4, getfrag, msg->msg_iov, ulen,
c0229224: e5953008 ldr r3, [r5, #8]
c0229228: e3a00008 mov r0, #8
c022922c: e5952018 ldr r2, [r5, #24]
c0229230: e28dc03c add ip, sp, #60 ; 0x3c
c0229234: e3822902 orr r2, r2, #32768 ; 0x8000
c0229238: e58d2010 str r2, [sp, #16]
c022923c: e59d2020 ldr r2, [sp, #32]
c0229240: e58d8000 str r8, [sp]
c0229244: e58d2008 str r2, [sp, #8]
c0229248: e58d0004 str r0, [sp, #4]
c022924c: e1a0100b mov r1, fp
c0229250: e59d201c ldr r2, [sp, #28]
c0229254: e58dc00c str ip, [sp, #12]
c0229258: e1a00004 mov r0, r4
c022925c: ebfffffe bl 0 <ip_append_data>
c022925c: R_ARM_CALL ip_append_data
if (err)
c0229260: e2508000 subs r8, r0, #0
c0229264: 1a000074 bne c022943c <udp_sendmsg+0x44c>
else if (unlikely(skb_queue_empty(&sk->sk_write_queue)))
c0229268: e5941080 ldr r1, [r4, #128] ; 0x80
c022926c: e2842080 add r2, r4, #128 ; 0x80
c0229270: e1510002 cmp r1, r2
up->pending = 0;
c0229274: 058481e8 streq r8, [r4, #488] ; 0x1e8
release_sock(sk);
c0229278: e1a00004 mov r0, r4
c022927c: ebfffffe bl 0 <release_sock>
c022927c: R_ARM_CALL release_sock
c0229280: e59d003c ldr r0, [sp, #60] ; 0x3c
extern void fib_add_ifaddr(struct in_ifaddr *);
extern void fib_del_ifaddr(struct in_ifaddr *, struct in_ifaddr *);
static inline void ip_rt_put(struct rtable * rt)
{
if (rt)
c0229284: e3500000 cmp r0, #0
c0229288: 0a000000 beq c0229290 <udp_sendmsg+0x2a0>
dst_release(&rt->dst);
c022928c: ebfffffe bl 0 <dst_release>
c022928c: R_ARM_CALL dst_release
if (free)
c0229290: e59d3024 ldr r3, [sp, #36] ; 0x24
c0229294: e3530000 cmp r3, #0
c0229298: 1a000062 bne c0229428 <udp_sendmsg+0x438>
if (!err)
c022929c: e3580000 cmp r8, #0
return len;
c02292a0: 01a00007 moveq r0, r7
if (!err)
c02292a4: 0a000011 beq c02292f0 <udp_sendmsg+0x300>
if (err == -ENOBUFS || test_bit(SOCK_NOSPACE, &sk->sk_socket->flags)) {
c02292a8: e3780069 cmn r8, #105 ; 0x69
c02292ac: 0a000003 beq c02292c0 <udp_sendmsg+0x2d0>
c02292b0: e5942118 ldr r2, [r4, #280] ; 0x118
c02292b4: e5922008 ldr r2, [r2, #8]
c02292b8: e3120004 tst r2, #4
c02292bc: 0a00000a beq c02292ec <udp_sendmsg+0x2fc>
UDP_INC_STATS_USER(sock_net(sk),
c02292c0: e3590000 cmp r9, #0
c02292c4: 0a000065 beq c0229460 <udp_sendmsg+0x470>
asm volatile(
c02292c8: e10f0000 mrs r0, CPSR
c02292cc: e3802080 orr r2, r0, #128 ; 0x80
c02292d0: e121f002 msr CPSR_c, r2
c02292d4: e59f2498 ldr r2, [pc, #1176] ; c0229774 <udp_sendmsg+0x784>
c02292d8: e592109c ldr r1, [r2, #156] ; 0x9c
c02292dc: e5912018 ldr r2, [r1, #24]
c02292e0: e2822001 add r2, r2, #1
c02292e4: e5812018 str r2, [r1, #24]
asm volatile(
c02292e8: e121f000 msr CPSR_c, r0
c02292ec: e1a00008 mov r0, r8
}
c02292f0: e28dd0b4 add sp, sp, #180 ; 0xb4
c02292f4: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
c02292f8: e1a00004 mov r0, r4
c02292fc: e1a0100a mov r1, sl
c0229300: ebfffffe bl 0 <lock_sock_nested>
c0229300: R_ARM_CALL lock_sock_nested
if (likely(up->pending)) {
c0229304: e59431e8 ldr r3, [r4, #488] ; 0x1e8
c0229308: e3530000 cmp r3, #0
c022930c: 0a0000d8 beq c0229674 <udp_sendmsg+0x684>
if (unlikely(up->pending != AF_INET)) {
c0229310: e3530002 cmp r3, #2
c0229314: 1a0000d9 bne c0229680 <udp_sendmsg+0x690>
up->len += ulen;
c0229318: e2846e1f add r6, r4, #496 ; 0x1f0
c022931c: e1d630b2 ldrh r3, [r6, #2]
err = ip_append_data(sk, fl4, getfrag, msg->msg_iov, ulen,
c0229320: e59d2018 ldr r2, [sp, #24]
up->len += ulen;
c0229324: e0873003 add r3, r7, r3
c0229328: e1c630b2 strh r3, [r6, #2]
err = ip_append_data(sk, fl4, getfrag, msg->msg_iov, ulen,
c022932c: e3520000 cmp r2, #0
c0229330: e5953008 ldr r3, [r5, #8]
c0229334: 1a000079 bne c0229520 <udp_sendmsg+0x530>
c0229338: e3a0c008 mov ip, #8
c022933c: e5952018 ldr r2, [r5, #24]
c0229340: e28de040 add lr, sp, #64 ; 0x40
c0229344: e28d003c add r0, sp, #60 ; 0x3c
c0229348: e58d2010 str r2, [sp, #16]
c022934c: e58d000c str r0, [sp, #12]
c0229350: e58d7000 str r7, [sp]
c0229354: e1a0100b mov r1, fp
c0229358: e59d201c ldr r2, [sp, #28]
c022935c: e98d5000 stmib sp, {ip, lr}
c0229360: e1a00004 mov r0, r4
c0229364: ebfffffe bl 0 <ip_append_data>
c0229364: R_ARM_CALL ip_append_data
if (err)
c0229368: e2508000 subs r8, r0, #0
c022936c: 1a000030 bne c0229434 <udp_sendmsg+0x444>
c0229370: e59d3018 ldr r3, [sp, #24]
err = udp_push_pending_frames(sk);
c0229374: e1a00004 mov r0, r4
c0229378: e58d3024 str r3, [sp, #36] ; 0x24
c022937c: ebfffffe bl c02283a8 <udp_push_pending_frames>
c022937c: R_ARM_CALL udp_push_pending_frames
c0229380: e1a08000 mov r8, r0
c0229384: eaffffbb b c0229278 <udp_sendmsg+0x288>
if (!daddr)
c0229388: e35a0000 cmp sl, #0
c022938c: 0a000061 beq c0229518 <udp_sendmsg+0x528>
faddr = ipc.opt->opt.faddr;
c0229390: e5912008 ldr r2, [r1, #8]
connected = 0;
c0229394: e3a06000 mov r6, #0
faddr = ipc.opt->opt.faddr;
c0229398: e58d202c str r2, [sp, #44] ; 0x2c
c022939c: eaffff59 b c0229108 <udp_sendmsg+0x118>
connected = 0;
c02293a0: e3a06000 mov r6, #0
tos |= RTO_ONLINK;
c02293a4: e3822001 orr r2, r2, #1
c02293a8: eaffff63 b c022913c <udp_sendmsg+0x14c>
if (!ipc.addr)
c02293ac: e59d1040 ldr r1, [sp, #64] ; 0x40
saddr = fl4->saddr;
c02293b0: e5963014 ldr r3, [r6, #20]
if (!ipc.addr)
c02293b4: e3510000 cmp r1, #0
daddr = ipc.addr = fl4->daddr;
c02293b8: 0596a018 ldreq sl, [r6, #24]
if (!corkreq) {
c02293bc: e59d1018 ldr r1, [sp, #24]
daddr = ipc.addr = fl4->daddr;
c02293c0: 058da040 streq sl, [sp, #64] ; 0x40
if (!corkreq) {
c02293c4: e3510000 cmp r1, #0
ulen += sizeof(struct udphdr);
c02293c8: e2878008 add r8, r7, #8
if (!corkreq) {
c02293cc: 1affff7f bne c02291d0 <udp_sendmsg+0x1e0>
skb = ip_make_skb(sk, fl4, getfrag, msg->msg_iov, ulen,
c02293d0: e3a00008 mov r0, #8
c02293d4: e59dc020 ldr ip, [sp, #32]
c02293d8: e28d103c add r1, sp, #60 ; 0x3c
c02293dc: e5953008 ldr r3, [r5, #8]
c02293e0: e58d8000 str r8, [sp]
c02293e4: e58d2010 str r2, [sp, #16]
c02293e8: e58d0004 str r0, [sp, #4]
c02293ec: e58d100c str r1, [sp, #12]
c02293f0: e58dc008 str ip, [sp, #8]
c02293f4: e59d201c ldr r2, [sp, #28]
c02293f8: e1a00004 mov r0, r4
c02293fc: e1a01006 mov r1, r6
c0229400: ebfffffe bl 0 <ip_make_skb>
c0229400: R_ARM_CALL ip_make_skb
if (skb && !IS_ERR(skb))
c0229404: e2508000 subs r8, r0, #0
c0229408: 0affff6e beq c02291c8 <udp_sendmsg+0x1d8>
c022940c: e3780a01 cmn r8, #4096 ; 0x1000
c0229410: 8affff6c bhi c02291c8 <udp_sendmsg+0x1d8>
err = udp_send_skb(skb, fl4);
c0229414: e1a01006 mov r1, r6
c0229418: ebfffb11 bl c0228064 <udp_send_skb>
c022941c: e1a08000 mov r8, r0
c0229420: e59d003c ldr r0, [sp, #60] ; 0x3c
c0229424: eaffff96 b c0229284 <udp_sendmsg+0x294>
kfree(ipc.opt);
c0229428: e59d0048 ldr r0, [sp, #72] ; 0x48
c022942c: ebfffffe bl 0 <kfree>
c022942c: R_ARM_CALL kfree
c0229430: eaffff99 b c022929c <udp_sendmsg+0x2ac>
int free = 0;
c0229434: e59d3018 ldr r3, [sp, #24]
c0229438: e58d3024 str r3, [sp, #36] ; 0x24
if (up->pending) {
c022943c: e59421e8 ldr r2, [r4, #488] ; 0x1e8
c0229440: e3520000 cmp r2, #0
c0229444: 0affff8b beq c0229278 <udp_sendmsg+0x288>
up->len = 0;
c0229448: e3a02000 mov r2, #0
ip_flush_pending_frames(sk);
c022944c: e1a00004 mov r0, r4
up->len = 0;
c0229450: e1c620b2 strh r2, [r6, #2]
up->pending = 0;
c0229454: e58421e8 str r2, [r4, #488] ; 0x1e8
ip_flush_pending_frames(sk);
c0229458: ebfffffe bl 0 <ip_flush_pending_frames>
c0229458: R_ARM_CALL ip_flush_pending_frames
c022945c: eaffff85 b c0229278 <udp_sendmsg+0x288>
asm volatile(
c0229460: e10f0000 mrs r0, CPSR
c0229464: e3802080 orr r2, r0, #128 ; 0x80
c0229468: e121f002 msr CPSR_c, r2
UDP_INC_STATS_USER(sock_net(sk),
c022946c: e59f2300 ldr r2, [pc, #768] ; c0229774 <udp_sendmsg+0x784>
c0229470: e5921098 ldr r1, [r2, #152] ; 0x98
c0229474: eaffff98 b c02292dc <udp_sendmsg+0x2ec>
err = ip_cmsg_send(sock_net(sk), msg, &ipc);
c0229478: e59f02f4 ldr r0, [pc, #756] ; c0229774 <udp_sendmsg+0x784>
c022947c: e1a01005 mov r1, r5
c0229480: e59d2020 ldr r2, [sp, #32]
c0229484: ebfffffe bl 0 <ip_cmsg_send>
c0229484: R_ARM_CALL ip_cmsg_send
if (err)
c0229488: e3500000 cmp r0, #0
c022948c: 1affff97 bne c02292f0 <udp_sendmsg+0x300>
if (ipc.opt)
c0229490: e59d1048 ldr r1, [sp, #72] ; 0x48
connected = 0;
c0229494: e1a06008 mov r6, r8
if (ipc.opt)
c0229498: e2913000 adds r3, r1, #0
c022949c: 13a03001 movne r3, #1
c02294a0: e58d3024 str r3, [sp, #36] ; 0x24
c02294a4: eaffff0f b c02290e8 <udp_sendmsg+0xf8>
if (sk->sk_state != TCP_ESTABLISHED)
c02294a8: e5d4600e ldrb r6, [r4, #14]
c02294ac: e20660ff and r6, r6, #255 ; 0xff
c02294b0: e3560001 cmp r6, #1
c02294b4: 1a000091 bne c0229700 <udp_sendmsg+0x710>
daddr = inet->inet_daddr;
c02294b8: e1a03004 mov r3, r4
c02294bc: e493a158 ldr sl, [r3], #344 ; 0x158
dport = inet->inet_dport;
c02294c0: e1d330b0 ldrh r3, [r3]
c02294c4: e58d3028 str r3, [sp, #40] ; 0x28
c02294c8: eafffef6 b c02290a8 <udp_sendmsg+0xb8>
rt = (struct rtable *)sk_dst_check(sk, 0);
c02294cc: e3a01000 mov r1, #0
c02294d0: e1a00004 mov r0, r4
c02294d4: e58d3034 str r3, [sp, #52] ; 0x34
c02294d8: e58d2030 str r2, [sp, #48] ; 0x30
c02294dc: ebfffffe bl 0 <sk_dst_check>
c02294dc: R_ARM_CALL sk_dst_check
c02294e0: e3a06001 mov r6, #1
c02294e4: e1a01000 mov r1, r0
c02294e8: e58d003c str r0, [sp, #60] ; 0x3c
c02294ec: e59d3034 ldr r3, [sp, #52] ; 0x34
c02294f0: e59d2030 ldr r2, [sp, #48] ; 0x30
c02294f4: eaffff1a b c0229164 <udp_sendmsg+0x174>
if (!ipc.oif)
c02294f8: e3510000 cmp r1, #0
ipc.oif = inet->mc_index;
c02294fc: 05941178 ldreq r1, [r4, #376] ; 0x178
c0229500: 058d1044 streq r1, [sp, #68] ; 0x44
if (!saddr)
c0229504: e3530000 cmp r3, #0
saddr = inet->mc_addr;
c0229508: 0594317c ldreq r3, [r4, #380] ; 0x17c
c022950c: e59d103c ldr r1, [sp, #60] ; 0x3c
connected = 0;
c0229510: e3a06000 mov r6, #0
c0229514: eaffff12 b c0229164 <udp_sendmsg+0x174>
return -EINVAL;
c0229518: e3e00015 mvn r0, #21
c022951c: eaffff73 b c02292f0 <udp_sendmsg+0x300>
c0229520: e28d2040 add r2, sp, #64 ; 0x40
int free = 0;
c0229524: e58da024 str sl, [sp, #36] ; 0x24
int ulen = len;
c0229528: e1a08007 mov r8, r7
c022952c: e58d2020 str r2, [sp, #32]
c0229530: eaffff3c b c0229228 <udp_sendmsg+0x238>
fl4->flowi4_scope = scope;
fl4->flowi4_proto = proto;
fl4->flowi4_flags = flags;
fl4->flowi4_secid = 0;
fl4->daddr = daddr;
fl4->saddr = saddr;
c0229534: e58d3064 str r3, [sp, #100] ; 0x64
fl4->fl4_dport = dport;
c0229538: e1dd32b8 ldrh r3, [sp, #40] ; 0x28
c022953c: e5d41170 ldrb r1, [r4, #368] ; 0x170
c0229540: e1cd36bc strh r3, [sp, #108] ; 0x6c
fl4->flowi4_iif = 0;
c0229544: e3a03000 mov r3, #0
static inline __u8 inet_sk_flowi_flags(const struct sock *sk)
{
__u8 flags = 0;
if (inet_sk(sk)->transparent || inet_sk(sk)->hdrincl)
c0229548: e3110028 tst r1, #40 ; 0x28
__u8 flags = 0;
c022954c: 13a01001 movne r1, #1
c0229550: 03a01000 moveq r1, #0
c0229554: e58d3054 str r3, [sp, #84] ; 0x54
fl4->flowi4_scope = scope;
c0229558: e5cd305d strb r3, [sp, #93] ; 0x5d
fl4->flowi4_secid = 0;
c022955c: e3a03000 mov r3, #0
flowi4_init_output(fl4, ipc.oif, sk->sk_mark, tos,
c0229560: e5d4e08d ldrb lr, [r4, #141] ; 0x8d
c0229564: e594c134 ldr ip, [r4, #308] ; 0x134
flags |= FLOWI_FLAG_ANYSRC;
if (sk->sk_protocol == IPPROTO_TCP)
c0229568: e35e0006 cmp lr, #6
flags |= FLOWI_FLAG_PRECOW_METRICS;
c022956c: 03811002 orreq r1, r1, #2
c0229570: 020110ff andeq r1, r1, #255 ; 0xff
c0229574: e58dc030 str ip, [sp, #48] ; 0x30
c0229578: e3811004 orr r1, r1, #4
c022957c: e59d0044 ldr r0, [sp, #68] ; 0x44
fl4->flowi4_flags = flags;
c0229580: e5cd105f strb r1, [sp, #95] ; 0x5f
fl4->flowi4_tos = tos;
c0229584: e5cd205c strb r2, [sp, #92] ; 0x5c
fl4->flowi4_mark = mark;
c0229588: e59d1030 ldr r1, [sp, #48] ; 0x30
fl4->daddr = daddr;
c022958c: e59d202c ldr r2, [sp, #44] ; 0x2c
c0229590: e284cf59 add ip, r4, #356 ; 0x164
c0229594: e1dcc0b0 ldrh ip, [ip]
fl4->flowi4_oif = oif;
c0229598: e58d0050 str r0, [sp, #80] ; 0x50
fl4->flowi4_mark = mark;
c022959c: e58d1058 str r1, [sp, #88] ; 0x58
fl4->daddr = daddr;
c02295a0: e58d2068 str r2, [sp, #104] ; 0x68
rt = ip_route_output_flow(net, fl4, sk);
c02295a4: e59f01c8 ldr r0, [pc, #456] ; c0229774 <udp_sendmsg+0x784>
c02295a8: e28d1050 add r1, sp, #80 ; 0x50
c02295ac: e1a02004 mov r2, r4
fl4->flowi4_proto = proto;
c02295b0: e5cde05e strb lr, [sp, #94] ; 0x5e
fl4->fl4_sport = sport;
c02295b4: e1cdc6be strh ip, [sp, #110] ; 0x6e
fl4->flowi4_secid = 0;
c02295b8: e58d3060 str r3, [sp, #96] ; 0x60
c02295bc: ebfffffe bl 0 <ip_route_output_flow>
c02295bc: R_ARM_CALL ip_route_output_flow
if (IS_ERR(rt)) {
c02295c0: e3700a01 cmn r0, #4096 ; 0x1000
rt = ip_route_output_flow(net, fl4, sk);
c02295c4: e58d003c str r0, [sp, #60] ; 0x3c
if (IS_ERR(rt)) {
c02295c8: 8a00004e bhi c0229708 <udp_sendmsg+0x718>
if ((rt->rt_flags & RTCF_BROADCAST) &&
c02295cc: e590205c ldr r2, [r0, #92] ; 0x5c
c02295d0: e3120201 tst r2, #268435456 ; 0x10000000
c02295d4: 0a000003 beq c02295e8 <udp_sendmsg+0x5f8>
c02295d8: e594206c ldr r2, [r4, #108] ; 0x6c
c02295dc: e3120040 tst r2, #64 ; 0x40
err = -EACCES;
c02295e0: 03e0800c mvneq r8, #12
if ((rt->rt_flags & RTCF_BROADCAST) &&
c02295e4: 0affff26 beq c0229284 <udp_sendmsg+0x294>
if (connected)
c02295e8: e3560000 cmp r6, #0
c02295ec: 0a00001a beq c022965c <udp_sendmsg+0x66c>
if (dst)
c02295f0: e3500000 cmp r0, #0
c02295f4: 0a000006 beq c0229614 <udp_sendmsg+0x624>
c02295f8: e10f1000 mrs r1, CPSR
c02295fc: e3812080 orr r2, r1, #128 ; 0x80
c0229600: e121f002 msr CPSR_c, r2
val = v->counter;
c0229604: e5902040 ldr r2, [r0, #64] ; 0x40
v->counter = val += i;
c0229608: e2822001 add r2, r2, #1
c022960c: e5802040 str r2, [r0, #64] ; 0x40
asm volatile(
c0229610: e121f001 msr CPSR_c, r1
c0229614: e1a0300d mov r3, sp
c0229618: e3c36d7f bic r6, r3, #8128 ; 0x1fc0
c022961c: e3c6603f bic r6, r6, #63 ; 0x3f
raw_spin_lock(&lock->rlock);
c0229620: e5962004 ldr r2, [r6, #4]
c0229624: e2822001 add r2, r2, #1
c0229628: e5862004 str r2, [r6, #4]
sk->sk_tx_queue_mapping = -1;
c022962c: e3e02000 mvn r2, #0
c0229630: e5842028 str r2, [r4, #40] ; 0x28
old_dst = rcu_dereference_raw(sk->sk_dst_cache);
c0229634: e5942070 ldr r2, [r4, #112] ; 0x70
rcu_assign_pointer(sk->sk_dst_cache, dst);
c0229638: e5840070 str r0, [r4, #112] ; 0x70
dst_release(old_dst);
c022963c: e1a00002 mov r0, r2
c0229640: ebfffffe bl 0 <dst_release>
c0229640: R_ARM_CALL dst_release
raw_spin_unlock(&lock->rlock);
c0229644: e5962004 ldr r2, [r6, #4]
c0229648: e2422001 sub r2, r2, #1
c022964c: e5862004 str r2, [r6, #4]
c0229650: e5962000 ldr r2, [r6]
c0229654: e3120002 tst r2, #2
c0229658: 1a000040 bne c0229760 <udp_sendmsg+0x770>
fl4 = &fl4_stack;
c022965c: e28d6050 add r6, sp, #80 ; 0x50
c0229660: eafffec2 b c0229170 <udp_sendmsg+0x180>
return -EMSGSIZE;
c0229664: e3e00059 mvn r0, #89 ; 0x59
c0229668: eaffff20 b c02292f0 <udp_sendmsg+0x300>
return -EOPNOTSUPP;
c022966c: e3e0005e mvn r0, #94 ; 0x5e
c0229670: eaffff1e b c02292f0 <udp_sendmsg+0x300>
release_sock(sk);
c0229674: e1a00004 mov r0, r4
c0229678: ebfffffe bl 0 <release_sock>
c0229678: R_ARM_CALL release_sock
c022967c: eafffe7a b c022906c <udp_sendmsg+0x7c>
release_sock(sk);
c0229680: e1a00004 mov r0, r4
c0229684: ebfffffe bl 0 <release_sock>
c0229684: R_ARM_CALL release_sock
return -EINVAL;
c0229688: e3e00015 mvn r0, #21
c022968c: eaffff17 b c02292f0 <udp_sendmsg+0x300>
return -EAFNOSUPPORT;
c0229690: e3e00060 mvn r0, #96 ; 0x60
c0229694: eaffff15 b c02292f0 <udp_sendmsg+0x300>
__rcu_read_lock();
c0229698: ebfffffe bl 0 <__rcu_read_lock>
c0229698: R_ARM_CALL __rcu_read_lock
inet_opt = rcu_dereference(inet->inet_opt);
c022969c: e5941168 ldr r1, [r4, #360] ; 0x168
if (inet_opt) {
c02296a0: e3510000 cmp r1, #0
c02296a4: 0a000005 beq c02296c0 <udp_sendmsg+0x6d0>
memcpy(&opt_copy, inet_opt,
c02296a8: e5d12010 ldrb r2, [r1, #16]
c02296ac: e28dc070 add ip, sp, #112 ; 0x70
c02296b0: e2822018 add r2, r2, #24
c02296b4: e1a0000c mov r0, ip
c02296b8: ebfffffe bl 0 <memcpy>
c02296b8: R_ARM_CALL memcpy
ipc.opt = &opt_copy.opt;
c02296bc: e58d0048 str r0, [sp, #72] ; 0x48
__rcu_read_unlock();
c02296c0: ebfffffe bl 0 <__rcu_read_unlock>
c02296c0: R_ARM_CALL __rcu_read_unlock
c02296c4: e59d1048 ldr r1, [sp, #72] ; 0x48
saddr = ipc.addr;
c02296c8: e59d3040 ldr r3, [sp, #64] ; 0x40
if (ipc.opt && ipc.opt->opt.srr) {
c02296cc: e3510000 cmp r1, #0
ipc.addr = faddr = daddr;
c02296d0: e58da040 str sl, [sp, #64] ; 0x40
if (ipc.opt && ipc.opt->opt.srr) {
c02296d4: 0afffe8a beq c0229104 <udp_sendmsg+0x114>
c02296d8: eafffe86 b c02290f8 <udp_sendmsg+0x108>
release_sock(sk);
c02296dc: e1a00004 mov r0, r4
c02296e0: ebfffffe bl 0 <release_sock>
c02296e0: R_ARM_CALL release_sock
LIMIT_NETDEBUG(KERN_DEBUG pr_fmt("cork app bug 2\n"));
c02296e4: e59f308c ldr r3, [pc, #140] ; c0229778 <udp_sendmsg+0x788>
c02296e8: e5933000 ldr r3, [r3]
c02296ec: e3530000 cmp r3, #0
c02296f0: 1a000013 bne c0229744 <udp_sendmsg+0x754>
c02296f4: e59d003c ldr r0, [sp, #60] ; 0x3c
err = -EINVAL;
c02296f8: e3e08015 mvn r8, #21
c02296fc: eafffee0 b c0229284 <udp_sendmsg+0x294>
return -EDESTADDRREQ;
c0229700: e3e00058 mvn r0, #88 ; 0x58
c0229704: eafffef9 b c02292f0 <udp_sendmsg+0x300>
rt = NULL;
c0229708: e3a03000 mov r3, #0
if (err == -ENETUNREACH)
c022970c: e3700065 cmn r0, #101 ; 0x65
return (void *) error;
}
static inline long __must_check PTR_ERR(const void *ptr)
{
return (long) ptr;
c0229710: e1a08000 mov r8, r0
rt = NULL;
c0229714: e58d303c str r3, [sp, #60] ; 0x3c
if (err == -ENETUNREACH)
c0229718: 1afffedc bne c0229290 <udp_sendmsg+0x2a0>
IP_INC_STATS(net, IPSTATS_MIB_OUTNOROUTES);
c022971c: ebfffffe bl 0 <local_bh_disable>
c022971c: R_ARM_CALL local_bh_disable
c0229720: e59f304c ldr r3, [pc, #76] ; c0229774 <udp_sendmsg+0x784>
c0229724: e5932090 ldr r2, [r3, #144] ; 0x90
c0229728: e1c206d8 ldrd r0, [r2, #104] ; 0x68
c022972c: e2900001 adds r0, r0, #1
c0229730: e2a11000 adc r1, r1, #0
c0229734: e1c206f8 strd r0, [r2, #104] ; 0x68
c0229738: ebfffffe bl 0 <local_bh_enable>
c0229738: R_ARM_CALL local_bh_enable
c022973c: e59d003c ldr r0, [sp, #60] ; 0x3c
c0229740: eafffecf b c0229284 <udp_sendmsg+0x294>
LIMIT_NETDEBUG(KERN_DEBUG pr_fmt("cork app bug 2\n"));
c0229744: ebfffffe bl 0 <net_ratelimit>
c0229744: R_ARM_CALL net_ratelimit
c0229748: e3500000 cmp r0, #0
c022974c: 0affffe8 beq c02296f4 <udp_sendmsg+0x704>
c0229750: e59f0024 ldr r0, [pc, #36] ; c022977c <udp_sendmsg+0x78c>
c0229754: ebfffffe bl 0 <printk>
c0229754: R_ARM_CALL printk
err = -EINVAL;
c0229758: e3e08015 mvn r8, #21
c022975c: eafffe99 b c02291c8 <udp_sendmsg+0x1d8>
c0229760: ebfffffe bl 0 <preempt_schedule>
c0229760: R_ARM_CALL preempt_schedule
c0229764: eaffffbc b c022965c <udp_sendmsg+0x66c>
...
c0229768: R_ARM_ABS32 ip_generic_getfrag
c022976c: R_ARM_ABS32 udplite_getfrag
c0229770: R_ARM_ABS32 jiffies
c0229774: R_ARM_ABS32 init_net
c0229778: R_ARM_ABS32 net_msg_warn
c022977c: 00000014 .word 0x00000014
c022977c: R_ARM_ABS32 .rodata.str1.4
c0229780 <udp_ioctl>:
switch (cmd) {
c0229780: e59fc07c ldr ip, [pc, #124] ; c0229804 <udp_ioctl+0x84>
{
c0229784: e92d4010 push {r4, lr}
switch (cmd) {
c0229788: e151000c cmp r1, ip
{
c022978c: e1a03002 mov r3, r2
switch (cmd) {
c0229790: 0a000011 beq c02297dc <udp_ioctl+0x5c>
c0229794: e59f206c ldr r2, [pc, #108] ; c0229808 <udp_ioctl+0x88>
c0229798: e1510002 cmp r1, r2
c022979c: 1a00000c bne c02297d4 <udp_ioctl+0x54>
c02297a0: e1a04003 mov r4, r3
unsigned int amount = first_packet_length(sk);
c02297a4: ebfffba8 bl c022864c <first_packet_length>
c02297a8: e1a0300d mov r3, sp
c02297ac: e3c33d7f bic r3, r3, #8128 ; 0x1fc0
c02297b0: e3c3303f bic r3, r3, #63 ; 0x3f
return put_user(amount, (int __user *)arg);
c02297b4: e5931008 ldr r1, [r3, #8]
if (amount)
c02297b8: e3500000 cmp r0, #0
amount -= sizeof(struct udphdr);
c02297bc: 12402008 subne r2, r0, #8
if (amount)
c02297c0: 01a02000 moveq r2, r0
return put_user(amount, (int __user *)arg);
c02297c4: e2411001 sub r1, r1, #1
c02297c8: e1a00004 mov r0, r4
c02297cc: ebfffffe bl 0 <__put_user_4>
c02297cc: R_ARM_CALL __put_user_4
c02297d0: e8bd8010 pop {r4, pc}
return -ENOIOCTLCMD;
c02297d4: e59f0030 ldr r0, [pc, #48] ; c022980c <udp_ioctl+0x8c>
}
c02297d8: e8bd8010 pop {r4, pc}
c02297dc: e1a0100d mov r1, sp
c02297e0: e3c11d7f bic r1, r1, #8128 ; 0x1fc0
c02297e4: e3c1103f bic r1, r1, #63 ; 0x3f
return atomic_read(&sk->sk_wmem_alloc) - 1;
c02297e8: e5902074 ldr r2, [r0, #116] ; 0x74
return put_user(amount, (int __user *)arg);
c02297ec: e5911008 ldr r1, [r1, #8]
c02297f0: e2422001 sub r2, r2, #1
c02297f4: e1a00003 mov r0, r3
c02297f8: e2411001 sub r1, r1, #1
c02297fc: ebfffffe bl 0 <__put_user_4>
c02297fc: R_ARM_CALL __put_user_4
c0229800: e8bd8010 pop {r4, pc}
c0229804: 00005411 .word 0x00005411
c0229808: 0000541b .word 0x0000541b
c022980c: fffffdfd .word 0xfffffdfd
c0229810 <udp_setsockopt>:
if (level == SOL_UDP || level == SOL_UDPLITE)
c0229810: e3510011 cmp r1, #17
c0229814: 13510088 cmpne r1, #136 ; 0x88
{
c0229818: e52de004 push {lr} ; (str lr, [sp, #-4]!)
c022981c: e24dd00c sub sp, sp, #12
c0229820: e59dc010 ldr ip, [sp, #16]
if (level == SOL_UDP || level == SOL_UDPLITE)
c0229824: 0a000003 beq c0229838 <udp_setsockopt+0x28>
return ip_setsockopt(sk, level, optname, optval, optlen);
c0229828: e58dc010 str ip, [sp, #16]
}
c022982c: e28dd00c add sp, sp, #12
c0229830: e49de004 pop {lr} ; (ldr lr, [sp], #4)
return ip_setsockopt(sk, level, optname, optval, optlen);
c0229834: eafffffe b 0 <ip_setsockopt>
c0229834: R_ARM_JUMP24 ip_setsockopt
return udp_lib_setsockopt(sk, level, optname, optval, optlen,
c0229838: e59fe00c ldr lr, [pc, #12] ; c022984c <udp_setsockopt+0x3c>
c022983c: e88d5000 stm sp, {ip, lr}
c0229840: ebfffffe bl c02284a4 <udp_lib_setsockopt>
c0229840: R_ARM_CALL udp_lib_setsockopt
}
c0229844: e28dd00c add sp, sp, #12
c0229848: e49df004 pop {pc} ; (ldr pc, [sp], #4)
c022984c: 00000000 .word 0x00000000
c022984c: R_ARM_ABS32 udp_push_pending_frames
c0229850 <udp4_seq_show>:
atomic_read(&sp->sk_refcnt), sp,
atomic_read(&sp->sk_drops), len);
}
int udp4_seq_show(struct seq_file *seq, void *v)
{
c0229850: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
if (v == SEQ_START_TOKEN)
c0229854: e3510001 cmp r1, #1
{
c0229858: e24dd05c sub sp, sp, #92 ; 0x5c
c022985c: e1a04001 mov r4, r1
if (v == SEQ_START_TOKEN)
c0229860: 0a000043 beq c0229974 <udp4_seq_show+0x124>
"inode ref pointer drops");
else {
struct udp_iter_state *state = seq->private;
int len;
udp4_format_sock(v, seq, state->bucket, &len);
c0229864: e590203c ldr r2, [r0, #60] ; 0x3c
bucket, src, srcp, dest, destp, sp->sk_state,
c0229868: e5d1700e ldrb r7, [r1, #14]
__u16 srcp = ntohs(inet->inet_sport);
c022986c: e2843f59 add r3, r4, #356 ; 0x164
__u16 destp = ntohs(inet->inet_dport);
c0229870: e2811f56 add r1, r1, #344 ; 0x158
udp4_format_sock(v, seq, state->bucket, &len);
c0229874: e5922004 ldr r2, [r2, #4]
__u16 destp = ntohs(inet->inet_dport);
c0229878: e1d110b0 ldrh r1, [r1]
__u16 srcp = ntohs(inet->inet_sport);
c022987c: e1d330b0 ldrh r3, [r3]
c0229880: e1a05000 mov r5, r0
seq_printf(f, "%5d: %08X:%04X %08X:%04X"
c0229884: e1a00004 mov r0, r4
udp4_format_sock(v, seq, state->bucket, &len);
c0229888: e58d204c str r2, [sp, #76] ; 0x4c
__u16 destp = ntohs(inet->inet_dport);
c022988c: e58d1048 str r1, [sp, #72] ; 0x48
__u16 srcp = ntohs(inet->inet_sport);
c0229890: e58d3044 str r3, [sp, #68] ; 0x44
c0229894: e5946074 ldr r6, [r4, #116] ; 0x74
__be32 dest = inet->inet_daddr;
c0229898: e594b000 ldr fp, [r4]
__be32 src = inet->inet_rcv_saddr;
c022989c: e5948004 ldr r8, [r4, #4]
return atomic_read(&sk->sk_rmem_alloc);
c02298a0: e594a048 ldr sl, [r4, #72] ; 0x48
seq_printf(f, "%5d: %08X:%04X %08X:%04X"
c02298a4: ebfffffe bl 0 <sock_i_uid>
c02298a4: R_ARM_CALL sock_i_uid
c02298a8: e1a09000 mov r9, r0
c02298ac: e1a00004 mov r0, r4
c02298b0: ebfffffe bl 0 <sock_i_ino>
c02298b0: R_ARM_CALL sock_i_ino
c02298b4: e3a0e000 mov lr, #0
c02298b8: e59d1048 ldr r1, [sp, #72] ; 0x48
c02298bc: e59d3044 ldr r3, [sp, #68] ; 0x44
c02298c0: e1a0c421 lsr ip, r1, #8
c02298c4: e18cc401 orr ip, ip, r1, lsl #8
c02298c8: e1a01423 lsr r1, r3, #8
c02298cc: e1811403 orr r1, r1, r3, lsl #8
c02298d0: e594302c ldr r3, [r4, #44] ; 0x2c
bucket, src, srcp, dest, destp, sp->sk_state,
c02298d4: e20770ff and r7, r7, #255 ; 0xff
seq_printf(f, "%5d: %08X:%04X %08X:%04X"
c02298d8: e1a0c80c lsl ip, ip, #16
c02298dc: e58d3044 str r3, [sp, #68] ; 0x44
c02298e0: e58d700c str r7, [sp, #12]
c02298e4: e1a0c82c lsr ip, ip, #16
c02298e8: e1a01801 lsl r1, r1, #16
c02298ec: e594705c ldr r7, [r4, #92] ; 0x5c
c02298f0: e58dc008 str ip, [sp, #8]
c02298f4: e1a0c821 lsr ip, r1, #16
c02298f8: e59d1044 ldr r1, [sp, #68] ; 0x44
c02298fc: e58d002c str r0, [sp, #44] ; 0x2c
c0229900: e28d0054 add r0, sp, #84 ; 0x54
c0229904: e59d204c ldr r2, [sp, #76] ; 0x4c
c0229908: e1a03008 mov r3, r8
c022990c: e58d1030 str r1, [sp, #48] ; 0x30
c0229910: e58de018 str lr, [sp, #24]
c0229914: e58de01c str lr, [sp, #28]
c0229918: e58de020 str lr, [sp, #32]
c022991c: e58de028 str lr, [sp, #40] ; 0x28
c0229920: e58d003c str r0, [sp, #60] ; 0x3c
return atomic_read(&sk->sk_wmem_alloc) - 1;
c0229924: e2466001 sub r6, r6, #1
c0229928: e58d9024 str r9, [sp, #36] ; 0x24
c022992c: e58d4034 str r4, [sp, #52] ; 0x34
c0229930: e58d7038 str r7, [sp, #56] ; 0x38
c0229934: e1a00005 mov r0, r5
c0229938: e59f104c ldr r1, [pc, #76] ; c022998c <udp4_seq_show+0x13c>
c022993c: e58dc000 str ip, [sp]
c0229940: e58d6010 str r6, [sp, #16]
c0229944: e58db004 str fp, [sp, #4]
c0229948: e58da014 str sl, [sp, #20]
c022994c: ebfffffe bl 0 <seq_printf>
c022994c: R_ARM_CALL seq_printf
seq_printf(seq, "%*s\n", 127 - len, "");
c0229950: e59d2054 ldr r2, [sp, #84] ; 0x54
c0229954: e1a00005 mov r0, r5
c0229958: e262207f rsb r2, r2, #127 ; 0x7f
c022995c: e59f102c ldr r1, [pc, #44] ; c0229990 <udp4_seq_show+0x140>
c0229960: e59f302c ldr r3, [pc, #44] ; c0229994 <udp4_seq_show+0x144>
c0229964: ebfffffe bl 0 <seq_printf>
c0229964: R_ARM_CALL seq_printf
}
return 0;
}
c0229968: e3a00000 mov r0, #0
c022996c: e28dd05c add sp, sp, #92 ; 0x5c
c0229970: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
seq_printf(seq, "%-127s\n",
c0229974: e59f101c ldr r1, [pc, #28] ; c0229998 <udp4_seq_show+0x148>
c0229978: e59f201c ldr r2, [pc, #28] ; c022999c <udp4_seq_show+0x14c>
c022997c: ebfffffe bl 0 <seq_printf>
c022997c: R_ARM_CALL seq_printf
}
c0229980: e3a00000 mov r0, #0
c0229984: e28dd05c add sp, sp, #92 ; 0x5c
c0229988: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
c022998c: 000000a8 .word 0x000000a8
c022998c: R_ARM_ABS32 .rodata.str1.4
c0229990: 000000f8 .word 0x000000f8
c0229990: R_ARM_ABS32 .rodata.str1.4
c0229994: 00000100 .word 0x00000100
c0229994: R_ARM_ABS32 .rodata.str1.4
c0229998: 0000002c .word 0x0000002c
c0229998: R_ARM_ABS32 .rodata.str1.4
c022999c: 00000034 .word 0x00000034
c022999c: R_ARM_ABS32 .rodata.str1.4
c02299a0 <udp_lib_lport_inuse2.constprop.7>:
static int udp_lib_lport_inuse2(struct net *net, __u16 num,
c02299a0: e92d41f0 push {r4, r5, r6, r7, r8, lr}
c02299a4: e24dd008 sub sp, sp, #8
c02299a8: e1a0c00d mov ip, sp
c02299ac: e3cc7d7f bic r7, ip, #8128 ; 0x1fc0
c02299b0: e3c7e03f bic lr, r7, #63 ; 0x3f
raw_spin_lock(&lock->rlock);
c02299b4: e59ec004 ldr ip, [lr, #4]
c02299b8: e1a06000 mov r6, r0
c02299bc: e28cc001 add ip, ip, #1
c02299c0: e1a05002 mov r5, r2
c02299c4: e1a08003 mov r8, r3
c02299c8: e58ec004 str ip, [lr, #4]
udp_portaddr_for_each_entry(sk2, node, &hslot2->head)
c02299cc: e5914000 ldr r4, [r1]
c02299d0: e3140001 tst r4, #1
c02299d4: 0a000003 beq c02299e8 <udp_lib_lport_inuse2.constprop.7+0x48>
c02299d8: ea00001b b c0229a4c <udp_lib_lport_inuse2.constprop.7+0xac>
c02299dc: e5944000 ldr r4, [r4]
c02299e0: e3140001 tst r4, #1
c02299e4: 1a000018 bne c0229a4c <udp_lib_lport_inuse2.constprop.7+0xac>
c02299e8: e2441014 sub r1, r4, #20
if (net_eq(sock_net(sk2), net) &&
c02299ec: e1550001 cmp r5, r1
c02299f0: 0afffff9 beq c02299dc <udp_lib_lport_inuse2.constprop.7+0x3c>
sk2 != sk &&
c02299f4: e154c0bc ldrh ip, [r4, #-12]
c02299f8: e15c0006 cmp ip, r6
c02299fc: 1afffff6 bne c02299dc <udp_lib_lport_inuse2.constprop.7+0x3c>
(udp_sk(sk2)->udp_port_hash == num) &&
c0229a00: e5543005 ldrb r3, [r4, #-5]
c0229a04: e3530000 cmp r3, #0
c0229a08: 0a000002 beq c0229a18 <udp_lib_lport_inuse2.constprop.7+0x78>
(!sk2->sk_reuse || !sk->sk_reuse) &&
c0229a0c: e5d5300f ldrb r3, [r5, #15]
c0229a10: e3530000 cmp r3, #0
c0229a14: 1afffff0 bne c02299dc <udp_lib_lport_inuse2.constprop.7+0x3c>
(!sk2->sk_bound_dev_if || !sk->sk_bound_dev_if ||
c0229a18: e5142004 ldr r2, [r4, #-4]
(!sk2->sk_reuse || !sk->sk_reuse) &&
c0229a1c: e3520000 cmp r2, #0
c0229a20: 0a000003 beq c0229a34 <udp_lib_lport_inuse2.constprop.7+0x94>
(!sk2->sk_bound_dev_if || !sk->sk_bound_dev_if ||
c0229a24: e5953010 ldr r3, [r5, #16]
c0229a28: e1520003 cmp r2, r3
c0229a2c: 13530000 cmpne r3, #0
c0229a30: 1affffe9 bne c02299dc <udp_lib_lport_inuse2.constprop.7+0x3c>
(*saddr_comp)(sk, sk2)) {
c0229a34: e1a00005 mov r0, r5
c0229a38: e12fff38 blx r8
sk2->sk_bound_dev_if == sk->sk_bound_dev_if) &&
c0229a3c: e3500000 cmp r0, #0
c0229a40: 0affffe5 beq c02299dc <udp_lib_lport_inuse2.constprop.7+0x3c>
res = 1;
c0229a44: e3a00001 mov r0, #1
c0229a48: ea000000 b c0229a50 <udp_lib_lport_inuse2.constprop.7+0xb0>
int res = 0;
c0229a4c: e3a00000 mov r0, #0
c0229a50: e3c7703f bic r7, r7, #63 ; 0x3f
raw_spin_unlock(&lock->rlock);
c0229a54: e5973004 ldr r3, [r7, #4]
c0229a58: e2433001 sub r3, r3, #1
c0229a5c: e5873004 str r3, [r7, #4]
c0229a60: e5973000 ldr r3, [r7]
c0229a64: e3130002 tst r3, #2
c0229a68: 1a000001 bne c0229a74 <udp_lib_lport_inuse2.constprop.7+0xd4>
}
c0229a6c: e28dd008 add sp, sp, #8
c0229a70: e8bd81f0 pop {r4, r5, r6, r7, r8, pc}
c0229a74: e58d0004 str r0, [sp, #4]
c0229a78: ebfffffe bl 0 <preempt_schedule>
c0229a78: R_ARM_CALL preempt_schedule
c0229a7c: e59d0004 ldr r0, [sp, #4]
c0229a80: e28dd008 add sp, sp, #8
c0229a84: e8bd81f0 pop {r4, r5, r6, r7, r8, pc}
c0229a88 <udp_lib_lport_inuse.constprop.8>:
static int udp_lib_lport_inuse(struct net *net, __u16 num,
c0229a88: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr}
sk_nulls_for_each(sk2, node, &hslot->head)
c0229a8c: e5914000 ldr r4, [r1]
static int udp_lib_lport_inuse(struct net *net, __u16 num,
c0229a90: e59d5020 ldr r5, [sp, #32]
sk_nulls_for_each(sk2, node, &hslot->head)
c0229a94: e3140001 tst r4, #1
static int udp_lib_lport_inuse(struct net *net, __u16 num,
c0229a98: e59d7024 ldr r7, [sp, #36] ; 0x24
c0229a9c: 01a09003 moveq r9, r3
c0229aa0: 01a0a002 moveq sl, r2
c0229aa4: 01a06000 moveq r6, r0
unsigned long mask = BIT_MASK(nr);
c0229aa8: 03a08001 moveq r8, #1
sk_nulls_for_each(sk2, node, &hslot->head)
c0229aac: 0a000007 beq c0229ad0 <udp_lib_lport_inuse.constprop.8+0x48>
c0229ab0: ea00002b b c0229b64 <udp_lib_lport_inuse.constprop.8+0xdc>
(!sk2->sk_bound_dev_if || !sk->sk_bound_dev_if ||
c0229ab4: e5992010 ldr r2, [r9, #16]
c0229ab8: e1530002 cmp r3, r2
c0229abc: 13520000 cmpne r2, #0
c0229ac0: 0a000010 beq c0229b08 <udp_lib_lport_inuse.constprop.8+0x80>
sk_nulls_for_each(sk2, node, &hslot->head)
c0229ac4: e5944000 ldr r4, [r4]
c0229ac8: e3140001 tst r4, #1
c0229acc: 1a000024 bne c0229b64 <udp_lib_lport_inuse.constprop.8+0xdc>
c0229ad0: e2441020 sub r1, r4, #32
if (net_eq(sock_net(sk2), net) &&
c0229ad4: e1590001 cmp r9, r1
c0229ad8: 0afffff9 beq c0229ac4 <udp_lib_lport_inuse.constprop.8+0x3c>
sk2 != sk &&
c0229adc: e35a0000 cmp sl, #0
c0229ae0: 0a000021 beq c0229b6c <udp_lib_lport_inuse.constprop.8+0xe4>
(bitmap || udp_sk(sk2)->udp_port_hash == num) &&
c0229ae4: e5543011 ldrb r3, [r4, #-17] ; 0xffffffef
c0229ae8: e3530000 cmp r3, #0
c0229aec: 0a000002 beq c0229afc <udp_lib_lport_inuse.constprop.8+0x74>
(!sk2->sk_reuse || !sk->sk_reuse) &&
c0229af0: e5d9300f ldrb r3, [r9, #15]
c0229af4: e3530000 cmp r3, #0
c0229af8: 1afffff1 bne c0229ac4 <udp_lib_lport_inuse.constprop.8+0x3c>
(!sk2->sk_bound_dev_if || !sk->sk_bound_dev_if ||
c0229afc: e5143010 ldr r3, [r4, #-16]
(!sk2->sk_reuse || !sk->sk_reuse) &&
c0229b00: e3530000 cmp r3, #0
c0229b04: 1affffea bne c0229ab4 <udp_lib_lport_inuse.constprop.8+0x2c>
(*saddr_comp)(sk, sk2)) {
c0229b08: e1a00009 mov r0, r9
c0229b0c: e12fff35 blx r5
sk2->sk_bound_dev_if == sk->sk_bound_dev_if) &&
c0229b10: e3500000 cmp r0, #0
c0229b14: 0affffea beq c0229ac4 <udp_lib_lport_inuse.constprop.8+0x3c>
if (bitmap)
c0229b18: e35a0000 cmp sl, #0
c0229b1c: 0a000016 beq c0229b7c <udp_lib_lport_inuse.constprop.8+0xf4>
__set_bit(udp_sk(sk2)->udp_port_hash >> log,
c0229b20: e15411b8 ldrh r1, [r4, #-24] ; 0xffffffe8
c0229b24: e1a01751 asr r1, r1, r7
unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
c0229b28: e3510000 cmp r1, #0
c0229b2c: e281301f add r3, r1, #31
c0229b30: a1a03001 movge r3, r1
unsigned long mask = BIT_MASK(nr);
c0229b34: e1a02fc1 asr r2, r1, #31
c0229b38: e1a02da2 lsr r2, r2, #27
unsigned long *p = ((unsigned long *)addr) + BIT_WORD(nr);
c0229b3c: e1a032c3 asr r3, r3, #5
unsigned long mask = BIT_MASK(nr);
c0229b40: e0811002 add r1, r1, r2
*p |= mask;
c0229b44: e79a0103 ldr r0, [sl, r3, lsl #2]
unsigned long mask = BIT_MASK(nr);
c0229b48: e201101f and r1, r1, #31
c0229b4c: e0621001 rsb r1, r2, r1
*p |= mask;
c0229b50: e1801118 orr r1, r0, r8, lsl r1
c0229b54: e78a1103 str r1, [sl, r3, lsl #2]
sk_nulls_for_each(sk2, node, &hslot->head)
c0229b58: e5944000 ldr r4, [r4]
c0229b5c: e3140001 tst r4, #1
c0229b60: 0affffda beq c0229ad0 <udp_lib_lport_inuse.constprop.8+0x48>
return 0;
c0229b64: e3a00000 mov r0, #0
c0229b68: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc}
(bitmap || udp_sk(sk2)->udp_port_hash == num) &&
c0229b6c: e15431b8 ldrh r3, [r4, #-24] ; 0xffffffe8
c0229b70: e1530006 cmp r3, r6
c0229b74: 1affffd2 bne c0229ac4 <udp_lib_lport_inuse.constprop.8+0x3c>
c0229b78: eaffffd9 b c0229ae4 <udp_lib_lport_inuse.constprop.8+0x5c>
return 1;
c0229b7c: e3a00001 mov r0, #1
}
c0229b80: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc}
c0229b84 <udp_lib_get_port>:
{
c0229b84: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
c0229b88: e24dd04c sub sp, sp, #76 ; 0x4c
c0229b8c: e58d000c str r0, [sp, #12]
struct udp_table *udptable = sk->sk_prot->h.udp_table;
c0229b90: e590001c ldr r0, [r0, #28]
if (!snum) {
c0229b94: e2514000 subs r4, r1, #0
{
c0229b98: e58d2010 str r2, [sp, #16]
struct udp_table *udptable = sk->sk_prot->h.udp_table;
c0229b9c: e5907090 ldr r7, [r0, #144] ; 0x90
if (!snum) {
c0229ba0: 1a000061 bne c0229d2c <udp_lib_get_port+0x1a8>
inet_get_local_port_range(&low, &high);
c0229ba4: e28d0020 add r0, sp, #32
c0229ba8: e28d1024 add r1, sp, #36 ; 0x24
c0229bac: ebfffffe bl 0 <inet_get_local_port_range>
c0229bac: R_ARM_CALL inet_get_local_port_range
c0229bb0: e1a0200d mov r2, sp
remaining = (high - low) + 1;
c0229bb4: e59d3024 ldr r3, [sp, #36] ; 0x24
c0229bb8: e59d5020 ldr r5, [sp, #32]
c0229bbc: e3c22d7f bic r2, r2, #8128 ; 0x1fc0
c0229bc0: e1a0a002 mov sl, r2
c0229bc4: e0655003 rsb r5, r5, r3
c0229bc8: e58d201c str r2, [sp, #28]
rand = net_random();
c0229bcc: ebfffffe bl 0 <random32>
c0229bcc: R_ARM_CALL random32
remaining = (high - low) + 1;
c0229bd0: e2855001 add r5, r5, #1
first = (((u64)rand * remaining) >> 32) + low;
c0229bd4: e0832590 umull r2, r3, r0, r5
c0229bd8: e1a09fc5 asr r9, r5, #31
c0229bdc: e0233990 mla r3, r0, r9, r3
c0229be0: e59d5020 ldr r5, [sp, #32]
rand = (rand | 1) * (udptable->mask + 1);
c0229be4: e5972008 ldr r2, [r7, #8]
first = (((u64)rand * remaining) >> 32) + low;
c0229be8: e0835005 add r5, r3, r5
c0229bec: e1a05805 lsl r5, r5, #16
rand = (rand | 1) * (udptable->mask + 1);
c0229bf0: e2823001 add r3, r2, #1
c0229bf4: e3800001 orr r0, r0, #1
first = (((u64)rand * remaining) >> 32) + low;
c0229bf8: e1a05825 lsr r5, r5, #16
rand = (rand | 1) * (udptable->mask + 1);
c0229bfc: e0060093 mul r6, r3, r0
last = first + udptable->mask + 1;
c0229c00: e0853003 add r3, r5, r3
c0229c04: e1a03803 lsl r3, r3, #16
c0229c08: e1a03823 lsr r3, r3, #16
c0229c0c: e58d3018 str r3, [sp, #24]
c0229c10: e3ca903f bic r9, sl, #63 ; 0x3f
c0229c14: e28d8028 add r8, sp, #40 ; 0x28
return &table->hash[udp_hashfn(net, num, table->mask)];
c0229c18: e597c000 ldr ip, [r7]
c0229c1c: e0053002 and r3, r5, r2
c0229c20: e08c3183 add r3, ip, r3, lsl #3
{
if (small_const_nbits(nbits))
*dst = 0UL;
else {
int len = BITS_TO_LONGS(nbits) * sizeof(unsigned long);
memset(dst, 0, len);
c0229c24: e1a00008 mov r0, r8
c0229c28: e3a01020 mov r1, #32
c0229c2c: e1a0a003 mov sl, r3
c0229c30: e58d3014 str r3, [sp, #20]
c0229c34: ebfffffe bl 0 <__memzero>
c0229c34: R_ARM_CALL __memzero
raw_spin_lock_bh(&lock->rlock);
c0229c38: ebfffffe bl 0 <local_bh_disable>
c0229c38: R_ARM_CALL local_bh_disable
c0229c3c: e5993004 ldr r3, [r9, #4]
c0229c40: e2833001 add r3, r3, #1
c0229c44: e5893004 str r3, [r9, #4]
udp_lib_lport_inuse(net, snum, hslot, bitmap, sk,
c0229c48: e1a00004 mov r0, r4
return test_bit(port, sysctl_local_reserved_ports);
c0229c4c: e1a04005 mov r4, r5
c0229c50: e59d3010 ldr r3, [sp, #16]
c0229c54: e1a0100a mov r1, sl
c0229c58: e58d3000 str r3, [sp]
c0229c5c: e597300c ldr r3, [r7, #12]
c0229c60: e1a02008 mov r2, r8
c0229c64: e58d3004 str r3, [sp, #4]
c0229c68: e59d300c ldr r3, [sp, #12]
c0229c6c: ebffff85 bl c0229a88 <udp_lib_lport_inuse.constprop.8>
c0229c70: e59f32e4 ldr r3, [pc, #740] ; c0229f5c <udp_lib_get_port+0x3d8>
c0229c74: e59d0020 ldr r0, [sp, #32]
if (low <= snum && snum <= high &&
c0229c78: e59da024 ldr sl, [sp, #36] ; 0x24
c0229c7c: e593b000 ldr fp, [r3]
c0229c80: e0843006 add r3, r4, r6
c0229c84: e1540000 cmp r4, r0
c0229c88: e1a02803 lsl r2, r3, #16
c0229c8c: ba000015 blt c0229ce8 <udp_lib_get_port+0x164>
c0229c90: e154000a cmp r4, sl
c0229c94: ca000013 bgt c0229ce8 <udp_lib_get_port+0x164>
!test_bit(snum >> udptable->log, bitmap) &&
c0229c98: e597300c ldr r3, [r7, #12]
return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
c0229c9c: e284c01f add ip, r4, #31
c0229ca0: e1a03354 asr r3, r4, r3
c0229ca4: e3530000 cmp r3, #0
c0229ca8: e283101f add r1, r3, #31
c0229cac: a1a01003 movge r1, r3
c0229cb0: e1a012c1 asr r1, r1, #5
c0229cb4: e7981101 ldr r1, [r8, r1, lsl #2]
c0229cb8: e203301f and r3, r3, #31
c0229cbc: e1a03331 lsr r3, r1, r3
if (low <= snum && snum <= high &&
c0229cc0: e3130001 tst r3, #1
c0229cc4: e204e01f and lr, r4, #31
c0229cc8: 1a000006 bne c0229ce8 <udp_lib_get_port+0x164>
c0229ccc: e3540000 cmp r4, #0
c0229cd0: a1a0c004 movge ip, r4
c0229cd4: e1a0c2cc asr ip, ip, #5
c0229cd8: e79b310c ldr r3, [fp, ip, lsl #2]
c0229cdc: e1a0ee33 lsr lr, r3, lr
!test_bit(snum >> udptable->log, bitmap) &&
c0229ce0: e31e0001 tst lr, #1
c0229ce4: 0a00003a beq c0229dd4 <udp_lib_get_port+0x250>
c0229ce8: e1a04822 lsr r4, r2, #16
} while (snum != first);
c0229cec: e1550004 cmp r5, r4
c0229cf0: 1affffe2 bne c0229c80 <udp_lib_get_port+0xfc>
raw_spin_unlock_bh(&lock->rlock);
c0229cf4: e5993004 ldr r3, [r9, #4]
c0229cf8: e2433001 sub r3, r3, #1
c0229cfc: e5893004 str r3, [r9, #4]
c0229d00: ebfffffe bl 0 <local_bh_enable>
c0229d00: R_ARM_CALL local_bh_enable
} while (++first != last);
c0229d04: e2853001 add r3, r5, #1
c0229d08: e1a03803 lsl r3, r3, #16
c0229d0c: e59d2018 ldr r2, [sp, #24]
c0229d10: e1a03823 lsr r3, r3, #16
c0229d14: e1530002 cmp r3, r2
c0229d18: 0a000041 beq c0229e24 <udp_lib_get_port+0x2a0>
c0229d1c: e1a04005 mov r4, r5
c0229d20: e5972008 ldr r2, [r7, #8]
c0229d24: e1a05003 mov r5, r3
c0229d28: eaffffba b c0229c18 <udp_lib_get_port+0x94>
c0229d2c: e1a0100d mov r1, sp
c0229d30: e3c11d7f bic r1, r1, #8128 ; 0x1fc0
c0229d34: e1a05001 mov r5, r1
c0229d38: e1a06003 mov r6, r3
c0229d3c: e5973008 ldr r3, [r7, #8]
c0229d40: e5972000 ldr r2, [r7]
c0229d44: e0033004 and r3, r3, r4
c0229d48: e0823183 add r3, r2, r3, lsl #3
c0229d4c: e1a08003 mov r8, r3
c0229d50: e58d3014 str r3, [sp, #20]
c0229d54: e58d101c str r1, [sp, #28]
raw_spin_lock_bh(&lock->rlock);
c0229d58: ebfffffe bl 0 <local_bh_disable>
c0229d58: R_ARM_CALL local_bh_disable
c0229d5c: e3c5203f bic r2, r5, #63 ; 0x3f
c0229d60: e5923004 ldr r3, [r2, #4]
c0229d64: e2833001 add r3, r3, #1
c0229d68: e5823004 str r3, [r2, #4]
if (hslot->count > 10) {
c0229d6c: e5983004 ldr r3, [r8, #4]
c0229d70: e353000a cmp r3, #10
c0229d74: da00000b ble c0229da8 <udp_lib_get_port+0x224>
unsigned int slot2 = udp_sk(sk)->udp_portaddr_hash ^ snum;
c0229d78: e59d200c ldr r2, [sp, #12]
slot2 &= udptable->mask;
c0229d7c: e597c008 ldr ip, [r7, #8]
unsigned int slot2 = udp_sk(sk)->udp_portaddr_hash ^ snum;
c0229d80: e1d250ba ldrh r5, [r2, #10]
return &table->hash2[hash & table->mask];
c0229d84: e5972004 ldr r2, [r7, #4]
c0229d88: e0255004 eor r5, r5, r4
c0229d8c: e1a05805 lsl r5, r5, #16
slot2 &= udptable->mask;
c0229d90: e00c5825 and r5, ip, r5, lsr #16
c0229d94: e005100c and r1, r5, ip
c0229d98: e0821181 add r1, r2, r1, lsl #3
if (hslot->count < hslot2->count)
c0229d9c: e5912004 ldr r2, [r1, #4]
c0229da0: e1530002 cmp r3, r2
c0229da4: aa000022 bge c0229e34 <udp_lib_get_port+0x2b0>
if (udp_lib_lport_inuse(net, snum, hslot, NULL, sk,
c0229da8: e3a02000 mov r2, #0
c0229dac: e59d3010 ldr r3, [sp, #16]
c0229db0: e58d2004 str r2, [sp, #4]
c0229db4: e58d3000 str r3, [sp]
c0229db8: e1a00004 mov r0, r4
c0229dbc: e59d1014 ldr r1, [sp, #20]
c0229dc0: e59d300c ldr r3, [sp, #12]
c0229dc4: ebffff2f bl c0229a88 <udp_lib_lport_inuse.constprop.8>
c0229dc8: e3500000 cmp r0, #0
int error = 1;
c0229dcc: 13a04001 movne r4, #1
if (udp_lib_lport_inuse(net, snum, hslot, NULL, sk,
c0229dd0: 1a00000a bne c0229e00 <udp_lib_get_port+0x27c>
inet_sk(sk)->inet_num = snum;
c0229dd4: e59d100c ldr r1, [sp, #12]
c0229dd8: e2813f56 add r3, r1, #344 ; 0x158
c0229ddc: e1c340b2 strh r4, [r3, #2]
udp_sk(sk)->udp_portaddr_hash ^= snum;
c0229de0: e1d130ba ldrh r3, [r1, #10]
if (sk_unhashed(sk)) {
c0229de4: e5912024 ldr r2, [r1, #36] ; 0x24
udp_sk(sk)->udp_portaddr_hash ^= snum;
c0229de8: e0233004 eor r3, r3, r4
if (sk_unhashed(sk)) {
c0229dec: e3520000 cmp r2, #0
udp_sk(sk)->udp_port_hash = snum;
c0229df0: e1c140b8 strh r4, [r1, #8]
udp_sk(sk)->udp_portaddr_hash ^= snum;
c0229df4: e1c130ba strh r3, [r1, #10]
if (sk_unhashed(sk)) {
c0229df8: 0a000020 beq c0229e80 <udp_lib_get_port+0x2fc>
error = 0;
c0229dfc: e3a04000 mov r4, #0
c0229e00: e59d301c ldr r3, [sp, #28]
c0229e04: e3c3303f bic r3, r3, #63 ; 0x3f
raw_spin_unlock_bh(&lock->rlock);
c0229e08: e5932004 ldr r2, [r3, #4]
c0229e0c: e2422001 sub r2, r2, #1
c0229e10: e5832004 str r2, [r3, #4]
c0229e14: ebfffffe bl 0 <local_bh_enable>
c0229e14: R_ARM_CALL local_bh_enable
}
c0229e18: e1a00004 mov r0, r4
c0229e1c: e28dd04c add sp, sp, #76 ; 0x4c
c0229e20: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
int error = 1;
c0229e24: e3a04001 mov r4, #1
}
c0229e28: e1a00004 mov r0, r4
c0229e2c: e28dd04c add sp, sp, #76 ; 0x4c
c0229e30: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
exist = udp_lib_lport_inuse2(net, snum, hslot2,
c0229e34: e59d3010 ldr r3, [sp, #16]
c0229e38: e1a00004 mov r0, r4
c0229e3c: e59d200c ldr r2, [sp, #12]
hash2_nulladdr &= udptable->mask;
c0229e40: e006600c and r6, r6, ip
exist = udp_lib_lport_inuse2(net, snum, hslot2,
c0229e44: ebfffed5 bl c02299a0 <udp_lib_lport_inuse2.constprop.7>
if (!exist && (hash2_nulladdr != slot2)) {
c0229e48: e16f3f10 clz r3, r0
c0229e4c: e1560005 cmp r6, r5
c0229e50: e1a032a3 lsr r3, r3, #5
c0229e54: 03a03000 moveq r3, #0
c0229e58: e3530000 cmp r3, #0
c0229e5c: 0affffd9 beq c0229dc8 <udp_lib_get_port+0x244>
c0229e60: e9970006 ldmib r7, {r1, r2}
c0229e64: e0022006 and r2, r2, r6
exist = udp_lib_lport_inuse2(net, snum, hslot2,
c0229e68: e0811182 add r1, r1, r2, lsl #3
c0229e6c: e59d3010 ldr r3, [sp, #16]
c0229e70: e1a00004 mov r0, r4
c0229e74: e59d200c ldr r2, [sp, #12]
c0229e78: ebfffec8 bl c02299a0 <udp_lib_lport_inuse2.constprop.7>
c0229e7c: eaffffd1 b c0229dc8 <udp_lib_get_port+0x244>
asm volatile(
c0229e80: e10f2000 mrs r2, CPSR
c0229e84: e3823080 orr r3, r2, #128 ; 0x80
c0229e88: e121f003 msr CPSR_c, r3
val = v->counter;
c0229e8c: e59d100c ldr r1, [sp, #12]
c0229e90: e591302c ldr r3, [r1, #44] ; 0x2c
v->counter = val += i;
c0229e94: e2833001 add r3, r3, #1
c0229e98: e581302c str r3, [r1, #44] ; 0x2c
asm volatile(
c0229e9c: e121f002 msr CPSR_c, r2
struct hlist_nulls_node *first = h->first;
c0229ea0: e59d0014 ldr r0, [sp, #20]
hlist_nulls_add_head_rcu(&sk->sk_nulls_node, list);
c0229ea4: e2812020 add r2, r1, #32
c0229ea8: e5903000 ldr r3, [r0]
n->pprev = &h->first;
c0229eac: e5810024 str r0, [r1, #36] ; 0x24
n->next = first;
c0229eb0: e5813020 str r3, [r1, #32]
if (!is_a_nulls(first))
c0229eb4: e3130001 tst r3, #1
rcu_assign_pointer(hlist_nulls_first_rcu(h), n);
c0229eb8: e5802000 str r2, [r0]
first->pprev = &n->next;
c0229ebc: 05832004 streq r2, [r3, #4]
hslot->count++;
c0229ec0: e59d2014 ldr r2, [sp, #20]
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
c0229ec4: e59d400c ldr r4, [sp, #12]
hslot->count++;
c0229ec8: e5923004 ldr r3, [r2, #4]
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
c0229ecc: e59f008c ldr r0, [pc, #140] ; c0229f60 <udp_lib_get_port+0x3dc>
hslot->count++;
c0229ed0: e2833001 add r3, r3, #1
c0229ed4: e5823004 str r3, [r2, #4]
sock_prot_inuse_add(sock_net(sk), sk->sk_prot, 1);
c0229ed8: e594101c ldr r1, [r4, #28]
c0229edc: e3a02001 mov r2, #1
c0229ee0: ebfffffe bl 0 <sock_prot_inuse_add>
c0229ee0: R_ARM_CALL sock_prot_inuse_add
c0229ee4: e59d301c ldr r3, [sp, #28]
hslot2 = udp_hashslot2(udptable, udp_sk(sk)->udp_portaddr_hash);
c0229ee8: e1d4c0ba ldrh ip, [r4, #10]
c0229eec: e3c3103f bic r1, r3, #63 ; 0x3f
raw_spin_lock(&lock->rlock);
c0229ef0: e5912004 ldr r2, [r1, #4]
c0229ef4: e5973008 ldr r3, [r7, #8]
c0229ef8: e5970004 ldr r0, [r7, #4]
c0229efc: e2822001 add r2, r2, #1
c0229f00: e003300c and r3, r3, ip
c0229f04: e5812004 str r2, [r1, #4]
c0229f08: e0802183 add r2, r0, r3, lsl #3
struct hlist_nulls_node *first = h->first;
c0229f0c: e7901183 ldr r1, [r0, r3, lsl #3]
hlist_nulls_add_head_rcu(&udp_sk(sk)->udp_portaddr_node,
c0229f10: e284c014 add ip, r4, #20
n->next = first;
c0229f14: e5841014 str r1, [r4, #20]
n->pprev = &h->first;
c0229f18: e5842018 str r2, [r4, #24]
if (!is_a_nulls(first))
c0229f1c: e3110001 tst r1, #1
rcu_assign_pointer(hlist_nulls_first_rcu(h), n);
c0229f20: e780c183 str ip, [r0, r3, lsl #3]
first->pprev = &n->next;
c0229f24: 0581c004 streq ip, [r1, #4]
hslot2->count++;
c0229f28: e5923004 ldr r3, [r2, #4]
c0229f2c: e2833001 add r3, r3, #1
c0229f30: e5823004 str r3, [r2, #4]
c0229f34: e59d301c ldr r3, [sp, #28]
c0229f38: e3c3303f bic r3, r3, #63 ; 0x3f
raw_spin_unlock(&lock->rlock);
c0229f3c: e5932004 ldr r2, [r3, #4]
c0229f40: e2422001 sub r2, r2, #1
c0229f44: e5832004 str r2, [r3, #4]
c0229f48: e5933000 ldr r3, [r3]
c0229f4c: e3130002 tst r3, #2
c0229f50: 0affffa9 beq c0229dfc <udp_lib_get_port+0x278>
c0229f54: ebfffffe bl 0 <preempt_schedule>
c0229f54: R_ARM_CALL preempt_schedule
c0229f58: eaffffa7 b c0229dfc <udp_lib_get_port+0x278>
...
c0229f5c: R_ARM_ABS32 sysctl_local_reserved_ports
c0229f60: R_ARM_ABS32 init_net
c0229f64 <__udp4_lib_lookup>:
{
c0229f64: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
c0229f68: e24dd01c sub sp, sp, #28
c0229f6c: e1dd44b0 ldrh r4, [sp, #64] ; 0x40
c0229f70: e59da048 ldr sl, [sp, #72] ; 0x48
c0229f74: e1a0e424 lsr lr, r4, #8
c0229f78: e18e4404 orr r4, lr, r4, lsl #8
c0229f7c: e59a6008 ldr r6, [sl, #8]
c0229f80: e1a04804 lsl r4, r4, #16
struct udp_hslot *hslot2, *hslot = &udptable->hash[slot];
c0229f84: e59a5000 ldr r5, [sl]
c0229f88: e1a04824 lsr r4, r4, #16
c0229f8c: e0066004 and r6, r6, r4
c0229f90: e0855186 add r5, r5, r6, lsl #3
{
c0229f94: e1a07003 mov r7, r3
c0229f98: e1a0b000 mov fp, r0
c0229f9c: e1a08001 mov r8, r1
c0229fa0: e1a09002 mov r9, r2
__rcu_read_lock();
c0229fa4: ebfffffe bl 0 <__rcu_read_lock>
c0229fa4: R_ARM_CALL __rcu_read_lock
if (hslot->count > 10) {
c0229fa8: e5953004 ldr r3, [r5, #4]
c0229fac: e353000a cmp r3, #10
c0229fb0: e58d3014 str r3, [sp, #20]
c0229fb4: da00003a ble c022a0a4 <__udp4_lib_lookup+0x140>
hash2 = udp4_portaddr_hash(net, daddr, hnum);
c0229fb8: e1a01007 mov r1, r7
c0229fbc: e1a02004 mov r2, r4
c0229fc0: e1a0000b mov r0, fp
c0229fc4: ebfff6af bl c0227a88 <udp4_portaddr_hash>
hslot2 = &udptable->hash2[slot2];
c0229fc8: e99a0006 ldmib sl, {r1, r2}
slot2 = hash2 & udptable->mask;
c0229fcc: e0000002 and r0, r0, r2
hslot2 = &udptable->hash2[slot2];
c0229fd0: e0812180 add r2, r1, r0, lsl #3
if (hslot->count < hslot2->count)
c0229fd4: e5921004 ldr r1, [r2, #4]
c0229fd8: e59d3014 ldr r3, [sp, #20]
c0229fdc: e1530001 cmp r3, r1
c0229fe0: ba00002f blt c022a0a4 <__udp4_lib_lookup+0x140>
result = udp4_lib_lookup2(net, saddr, sport,
c0229fe4: e59d3044 ldr r3, [sp, #68] ; 0x44
c0229fe8: e58d2008 str r2, [sp, #8]
c0229fec: e58d3004 str r3, [sp, #4]
c0229ff0: e58d000c str r0, [sp, #12]
c0229ff4: e1a03007 mov r3, r7
c0229ff8: e58d4000 str r4, [sp]
c0229ffc: e1a0000b mov r0, fp
c022a000: e1a01008 mov r1, r8
c022a004: e1a02009 mov r2, r9
c022a008: ebfff791 bl c0227e54 <udp4_lib_lookup2>
if (!result) {
c022a00c: e2503000 subs r3, r0, #0
c022a010: 0a000005 beq c022a02c <__udp4_lib_lookup+0xc8>
c022a014: e58d3014 str r3, [sp, #20]
__rcu_read_unlock();
c022a018: ebfffffe bl 0 <__rcu_read_unlock>
c022a018: R_ARM_CALL __rcu_read_unlock
return result;
c022a01c: e59d3014 ldr r3, [sp, #20]
c022a020: e1a00003 mov r0, r3
}
c022a024: e28dd01c add sp, sp, #28
c022a028: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
return jhash_1word((__force u32)saddr, net_hash_mix(net)) ^ port;
c022a02c: e59f0230 ldr r0, [pc, #560] ; c022a264 <__udp4_lib_lookup+0x300>
slot2 = hash2 & udptable->mask;
c022a030: e59a2008 ldr r2, [sl, #8]
return jhash_1word((__force u32)saddr, net_hash_mix(net)) ^ port;
c022a034: e0200004 eor r0, r0, r4
hslot2 = &udptable->hash2[slot2];
c022a038: e59a1004 ldr r1, [sl, #4]
slot2 = hash2 & udptable->mask;
c022a03c: e0022000 and r2, r2, r0
hslot2 = &udptable->hash2[slot2];
c022a040: e0811182 add r1, r1, r2, lsl #3
if (hslot->count < hslot2->count)
c022a044: e5910004 ldr r0, [r1, #4]
c022a048: e595c004 ldr ip, [r5, #4]
c022a04c: e15c0000 cmp ip, r0
c022a050: ba000013 blt c022a0a4 <__udp4_lib_lookup+0x140>
result = udp4_lib_lookup2(net, saddr, sport,
c022a054: e59d0044 ldr r0, [sp, #68] ; 0x44
c022a058: e58d4000 str r4, [sp]
c022a05c: e98d0007 stmib sp, {r0, r1, r2}
c022a060: e1a0000b mov r0, fp
c022a064: e1a01008 mov r1, r8
c022a068: e1a02009 mov r2, r9
c022a06c: ebfff778 bl c0227e54 <udp4_lib_lookup2>
c022a070: e1a03000 mov r3, r0
c022a074: eaffffe6 b c022a014 <__udp4_lib_lookup+0xb0>
asm volatile(
c022a078: e10f2000 mrs r2, CPSR
c022a07c: e3823080 orr r3, r2, #128 ; 0x80
c022a080: e121f003 msr CPSR_c, r3
val = v->counter;
c022a084: e59e302c ldr r3, [lr, #44] ; 0x2c
v->counter = val -= i;
c022a088: e2433001 sub r3, r3, #1
c022a08c: e58e302c str r3, [lr, #44] ; 0x2c
asm volatile(
c022a090: e121f002 msr CPSR_c, r2
if (atomic_dec_and_test(&sk->sk_refcnt))
c022a094: e3530000 cmp r3, #0
c022a098: 1a000001 bne c022a0a4 <__udp4_lib_lookup+0x140>
sk_free(sk);
c022a09c: e1a0000e mov r0, lr
c022a0a0: ebfffffe bl 0 <sk_free>
c022a0a0: R_ARM_CALL sk_free
sk_nulls_for_each_rcu(sk, node, &hslot->head) {
c022a0a4: e595c000 ldr ip, [r5]
c022a0a8: e21ce001 ands lr, ip, #1
c022a0ac: 03e0b000 mvneq fp, #0
c022a0b0: 0a000003 beq c022a0c4 <__udp4_lib_lookup+0x160>
c022a0b4: ea000046 b c022a1d4 <__udp4_lib_lookup+0x270>
c022a0b8: e59cc000 ldr ip, [ip]
c022a0bc: e31c0001 tst ip, #1
c022a0c0: 1a000026 bne c022a160 <__udp4_lib_lookup+0x1fc>
if (net_eq(sock_net(sk), net) && udp_sk(sk)->udp_port_hash == hnum &&
c022a0c4: e15c31b8 ldrh r3, [ip, #-24] ; 0xffffffe8
c022a0c8: e1530004 cmp r3, r4
c022a0cc: 1afffff9 bne c022a0b8 <__udp4_lib_lookup+0x154>
score = (sk->sk_family == PF_INET ? 1 : 0);
c022a0d0: e15c21b4 ldrh r2, [ip, #-20] ; 0xffffffec
if (inet->inet_rcv_saddr) {
c022a0d4: e51c301c ldr r3, [ip, #-28] ; 0xffffffe4
score = (sk->sk_family == PF_INET ? 1 : 0);
c022a0d8: e2422002 sub r2, r2, #2
c022a0dc: e16f2f12 clz r2, r2
if (inet->inet_rcv_saddr) {
c022a0e0: e3530000 cmp r3, #0
score = (sk->sk_family == PF_INET ? 1 : 0);
c022a0e4: e1a022a2 lsr r2, r2, #5
if (inet->inet_rcv_saddr) {
c022a0e8: 0a000002 beq c022a0f8 <__udp4_lib_lookup+0x194>
if (inet->inet_rcv_saddr != daddr)
c022a0ec: e1570003 cmp r7, r3
c022a0f0: 1afffff0 bne c022a0b8 <__udp4_lib_lookup+0x154>
score += 2;
c022a0f4: e2822002 add r2, r2, #2
if (inet->inet_daddr) {
c022a0f8: e51c3020 ldr r3, [ip, #-32] ; 0xffffffe0
c022a0fc: e3530000 cmp r3, #0
c022a100: 0a000002 beq c022a110 <__udp4_lib_lookup+0x1ac>
if (inet->inet_daddr != saddr)
c022a104: e1580003 cmp r8, r3
c022a108: 1affffea bne c022a0b8 <__udp4_lib_lookup+0x154>
score += 2;
c022a10c: e2822002 add r2, r2, #2
if (inet->inet_dport) {
c022a110: e28c3f4e add r3, ip, #312 ; 0x138
c022a114: e1d330b0 ldrh r3, [r3]
c022a118: e3530000 cmp r3, #0
c022a11c: 0a000002 beq c022a12c <__udp4_lib_lookup+0x1c8>
if (inet->inet_dport != sport)
c022a120: e1590003 cmp r9, r3
c022a124: 1affffe3 bne c022a0b8 <__udp4_lib_lookup+0x154>
score += 2;
c022a128: e2822002 add r2, r2, #2
if (sk->sk_bound_dev_if) {
c022a12c: e51c3010 ldr r3, [ip, #-16]
c022a130: e3530000 cmp r3, #0
c022a134: 0a000003 beq c022a148 <__udp4_lib_lookup+0x1e4>
if (sk->sk_bound_dev_if != dif)
c022a138: e59d1044 ldr r1, [sp, #68] ; 0x44
c022a13c: e1510003 cmp r1, r3
c022a140: 1affffdc bne c022a0b8 <__udp4_lib_lookup+0x154>
score += 2;
c022a144: e2822002 add r2, r2, #2
if (score > badness) {
c022a148: e152000b cmp r2, fp
sk_nulls_for_each_rcu(sk, node, &hslot->head) {
c022a14c: c24ce020 subgt lr, ip, #32
c022a150: e59cc000 ldr ip, [ip]
c022a154: c1a0b002 movgt fp, r2
c022a158: e31c0001 tst ip, #1
c022a15c: 0affffd8 beq c022a0c4 <__udp4_lib_lookup+0x160>
if (get_nulls_value(node) != slot)
c022a160: e15600ac cmp r6, ip, lsr #1
c022a164: 1affffce bne c022a0a4 <__udp4_lib_lookup+0x140>
if (result) {
c022a168: e35e0000 cmp lr, #0
c022a16c: e1a0a00e mov sl, lr
c022a170: 0a000019 beq c022a1dc <__udp4_lib_lookup+0x278>
c022a174: e3a01002 mov r1, #2
c022a178: ea000001 b c022a184 <__udp4_lib_lookup+0x220>
} while (c);
c022a17c: e2521000 subs r1, r2, #0
c022a180: 0a000015 beq c022a1dc <__udp4_lib_lookup+0x278>
val = atomic_cmpxchg(v, c, c + 1);
c022a184: e2810001 add r0, r1, #1
asm volatile(
c022a188: e10fc000 mrs ip, CPSR
c022a18c: e38c2080 orr r2, ip, #128 ; 0x80
c022a190: e121f002 msr CPSR_c, r2
ret = v->counter;
c022a194: e59e202c ldr r2, [lr, #44] ; 0x2c
if (likely(ret == old))
c022a198: e1510002 cmp r1, r2
v->counter = new;
c022a19c: 058e002c streq r0, [lr, #44] ; 0x2c
asm volatile(
c022a1a0: e121f00c msr CPSR_c, ip
if (val == c)
c022a1a4: e1510002 cmp r1, r2
c022a1a8: 1afffff3 bne c022a17c <__udp4_lib_lookup+0x218>
if (net_eq(sock_net(sk), net) && udp_sk(sk)->udp_port_hash == hnum &&
c022a1ac: e1de20b8 ldrh r2, [lr, #8]
c022a1b0: e1520004 cmp r2, r4
c022a1b4: 0a00000a beq c022a1e4 <__udp4_lib_lookup+0x280>
return -1;
c022a1b8: e3e02000 mvn r2, #0
else if (unlikely(compute_score(result, net, saddr, hnum, sport,
c022a1bc: e152000b cmp r2, fp
c022a1c0: baffffac blt c022a078 <__udp4_lib_lookup+0x114>
c022a1c4: ebfffffe bl 0 <__rcu_read_unlock>
c022a1c4: R_ARM_CALL __rcu_read_unlock
return result;
c022a1c8: e1a0000a mov r0, sl
}
c022a1cc: e28dd01c add sp, sp, #28
c022a1d0: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
if (get_nulls_value(node) != slot)
c022a1d4: e15600ac cmp r6, ip, lsr #1
c022a1d8: 1affffb1 bne c022a0a4 <__udp4_lib_lookup+0x140>
return -1;
c022a1dc: e3a0a000 mov sl, #0
c022a1e0: eafffff7 b c022a1c4 <__udp4_lib_lookup+0x260>
score = (sk->sk_family == PF_INET ? 1 : 0);
c022a1e4: e1de20bc ldrh r2, [lr, #12]
if (inet->inet_rcv_saddr) {
c022a1e8: e59e1004 ldr r1, [lr, #4]
score = (sk->sk_family == PF_INET ? 1 : 0);
c022a1ec: e2422002 sub r2, r2, #2
c022a1f0: e16f2f12 clz r2, r2
if (inet->inet_rcv_saddr) {
c022a1f4: e3510000 cmp r1, #0
score = (sk->sk_family == PF_INET ? 1 : 0);
c022a1f8: e1a022a2 lsr r2, r2, #5
if (inet->inet_rcv_saddr) {
c022a1fc: 1a000014 bne c022a254 <__udp4_lib_lookup+0x2f0>
if (inet->inet_daddr) {
c022a200: e59e1000 ldr r1, [lr]
c022a204: e3510000 cmp r1, #0
c022a208: 0a000002 beq c022a218 <__udp4_lib_lookup+0x2b4>
if (inet->inet_daddr != saddr)
c022a20c: e1580001 cmp r8, r1
c022a210: 1affffe8 bne c022a1b8 <__udp4_lib_lookup+0x254>
score += 2;
c022a214: e2822002 add r2, r2, #2
if (inet->inet_dport) {
c022a218: e28e1f56 add r1, lr, #344 ; 0x158
c022a21c: e1d110b0 ldrh r1, [r1]
c022a220: e3510000 cmp r1, #0
c022a224: 0a000002 beq c022a234 <__udp4_lib_lookup+0x2d0>
if (inet->inet_dport != sport)
c022a228: e1590001 cmp r9, r1
c022a22c: 1affffe1 bne c022a1b8 <__udp4_lib_lookup+0x254>
score += 2;
c022a230: e2822002 add r2, r2, #2
if (sk->sk_bound_dev_if) {
c022a234: e59e1010 ldr r1, [lr, #16]
c022a238: e3510000 cmp r1, #0
c022a23c: 0affffde beq c022a1bc <__udp4_lib_lookup+0x258>
if (sk->sk_bound_dev_if != dif)
c022a240: e59d3044 ldr r3, [sp, #68] ; 0x44
c022a244: e1530001 cmp r3, r1
score += 2;
c022a248: 02822002 addeq r2, r2, #2
if (sk->sk_bound_dev_if != dif)
c022a24c: 1affffd9 bne c022a1b8 <__udp4_lib_lookup+0x254>
c022a250: eaffffd9 b c022a1bc <__udp4_lib_lookup+0x258>
if (inet->inet_rcv_saddr != daddr)
c022a254: e1570001 cmp r7, r1
c022a258: 1affffd6 bne c022a1b8 <__udp4_lib_lookup+0x254>
score += 2;
c022a25c: e2822002 add r2, r2, #2
c022a260: eaffffe6 b c022a200 <__udp4_lib_lookup+0x29c>
c022a264: 049396b8 .word 0x049396b8
c022a268 <udp4_lib_lookup>:
{
c022a268: e92d4010 push {r4, lr}
c022a26c: e24dd010 sub sp, sp, #16
c022a270: e1dd41b8 ldrh r4, [sp, #24]
c022a274: e59de01c ldr lr, [sp, #28]
return __udp4_lib_lookup(net, saddr, sport, daddr, dport, dif, &udp_table);
c022a278: e59fc010 ldr ip, [pc, #16] ; c022a290 <udp4_lib_lookup+0x28>
c022a27c: e88d4010 stm sp, {r4, lr}
c022a280: e58dc008 str ip, [sp, #8]
c022a284: ebfffffe bl c0229f64 <__udp4_lib_lookup>
c022a284: R_ARM_CALL __udp4_lib_lookup
}
c022a288: e28dd010 add sp, sp, #16
c022a28c: e8bd8010 pop {r4, pc}
c022a290: 00000000 .word 0x00000000
c022a290: R_ARM_ABS32 .data..read_mostly
c022a294 <udp_v4_get_port>:
{
c022a294: e92d4070 push {r4, r5, r6, lr}
c022a298: e1a04000 mov r4, r0
c022a29c: e1a05001 mov r5, r1
unsigned int hash2_partial =
c022a2a0: e3a02000 mov r2, #0
c022a2a4: e5941004 ldr r1, [r4, #4]
c022a2a8: e59f0020 ldr r0, [pc, #32] ; c022a2d0 <udp_v4_get_port+0x3c>
c022a2ac: ebfff5f5 bl c0227a88 <udp4_portaddr_hash>
return udp_lib_get_port(sk, snum, ipv4_rcv_saddr_equal, hash2_nulladdr);
c022a2b0: e59f301c ldr r3, [pc, #28] ; c022a2d4 <udp_v4_get_port+0x40>
udp_sk(sk)->udp_portaddr_hash = hash2_partial;
c022a2b4: e1c400ba strh r0, [r4, #10]
return udp_lib_get_port(sk, snum, ipv4_rcv_saddr_equal, hash2_nulladdr);
c022a2b8: e1a01005 mov r1, r5
c022a2bc: e1a00004 mov r0, r4
c022a2c0: e0233005 eor r3, r3, r5
c022a2c4: e59f200c ldr r2, [pc, #12] ; c022a2d8 <udp_v4_get_port+0x44>
}
c022a2c8: e8bd4070 pop {r4, r5, r6, lr}
return udp_lib_get_port(sk, snum, ipv4_rcv_saddr_equal, hash2_nulladdr);
c022a2cc: eafffffe b c0229b84 <udp_lib_get_port>
c022a2cc: R_ARM_JUMP24 udp_lib_get_port
c022a2d0: 00000000 .word 0x00000000
c022a2d0: R_ARM_ABS32 init_net
c022a2d4: 049396b8 .word 0x049396b8
c022a2d8: 00000000 .word 0x00000000
c022a2d8: R_ARM_ABS32 ipv4_rcv_saddr_equal
c022a2dc <udp_flush_pending_frames>:
if (up->pending) {
c022a2dc: e59021e8 ldr r2, [r0, #488] ; 0x1e8
c022a2e0: e3520000 cmp r2, #0
c022a2e4: 012fff1e bxeq lr
up->len = 0;
c022a2e8: e3a02000 mov r2, #0
c022a2ec: e2801e1f add r1, r0, #496 ; 0x1f0
c022a2f0: e1c120b2 strh r2, [r1, #2]
up->pending = 0;
c022a2f4: e58021e8 str r2, [r0, #488] ; 0x1e8
ip_flush_pending_frames(sk);
c022a2f8: eafffffe b 0 <ip_flush_pending_frames>
c022a2f8: R_ARM_JUMP24 ip_flush_pending_frames
c022a2fc <udp_destroy_sock>:
{
c022a2fc: e92d4038 push {r3, r4, r5, lr}
c022a300: e1a04000 mov r4, r0
bool slow = lock_sock_fast(sk);
c022a304: ebfffffe bl 0 <lock_sock_fast>
c022a304: R_ARM_CALL lock_sock_fast
if (up->pending) {
c022a308: e59431e8 ldr r3, [r4, #488] ; 0x1e8
bool slow = lock_sock_fast(sk);
c022a30c: e1a05000 mov r5, r0
if (up->pending) {
c022a310: e3530000 cmp r3, #0
c022a314: 1a00000c bne c022a34c <udp_destroy_sock+0x50>
if (slow)
c022a318: e3550000 cmp r5, #0
c022a31c: 1a000007 bne c022a340 <udp_destroy_sock+0x44>
c022a320: e1a0300d mov r3, sp
c022a324: e3c33d7f bic r3, r3, #8128 ; 0x1fc0
c022a328: e3c3303f bic r3, r3, #63 ; 0x3f
raw_spin_unlock_bh(&lock->rlock);
c022a32c: e5932004 ldr r2, [r3, #4]
c022a330: e2422001 sub r2, r2, #1
c022a334: e5832004 str r2, [r3, #4]
}
c022a338: e8bd4038 pop {r3, r4, r5, lr}
c022a33c: eafffffe b 0 <local_bh_enable>
c022a33c: R_ARM_JUMP24 local_bh_enable
release_sock(sk);
c022a340: e1a00004 mov r0, r4
c022a344: e8bd4038 pop {r3, r4, r5, lr}
c022a348: eafffffe b 0 <release_sock>
c022a348: R_ARM_JUMP24 release_sock
up->len = 0;
c022a34c: e3a03000 mov r3, #0
c022a350: e2842e1f add r2, r4, #496 ; 0x1f0
c022a354: e1c230b2 strh r3, [r2, #2]
ip_flush_pending_frames(sk);
c022a358: e1a00004 mov r0, r4
up->pending = 0;
c022a35c: e58431e8 str r3, [r4, #488] ; 0x1e8
ip_flush_pending_frames(sk);
c022a360: ebfffffe bl 0 <ip_flush_pending_frames>
c022a360: R_ARM_CALL ip_flush_pending_frames
c022a364: eaffffeb b c022a318 <udp_destroy_sock+0x1c>
c022a368 <udp_sendpage>:
{
c022a368: e92d43f0 push {r4, r5, r6, r7, r8, r9, lr}
c022a36c: e24dd02c sub sp, sp, #44 ; 0x2c
c022a370: e59d6048 ldr r6, [sp, #72] ; 0x48
if (!up->pending) {
c022a374: e590c1e8 ldr ip, [r0, #488] ; 0x1e8
if (flags & MSG_SENDPAGE_NOTLAST)
c022a378: e3160802 tst r6, #131072 ; 0x20000
flags |= MSG_MORE;
c022a37c: 13866902 orrne r6, r6, #32768 ; 0x8000
if (!up->pending) {
c022a380: e35c0000 cmp ip, #0
{
c022a384: e1a04000 mov r4, r0
c022a388: e1a09001 mov r9, r1
c022a38c: e1a08002 mov r8, r2
c022a390: e1a07003 mov r7, r3
if (!up->pending) {
c022a394: 1a00000e bne c022a3d4 <udp_sendpage+0x6c>
struct msghdr msg = { .msg_flags = flags|MSG_MORE };
c022a398: e386e902 orr lr, r6, #32768 ; 0x8000
ret = udp_sendmsg(NULL, sk, &msg, 0);
c022a39c: e1a0000c mov r0, ip
c022a3a0: e1a0300c mov r3, ip
c022a3a4: e1a01004 mov r1, r4
c022a3a8: e28d200c add r2, sp, #12
struct msghdr msg = { .msg_flags = flags|MSG_MORE };
c022a3ac: e58dc00c str ip, [sp, #12]
c022a3b0: e58dc010 str ip, [sp, #16]
c022a3b4: e58dc014 str ip, [sp, #20]
c022a3b8: e58dc018 str ip, [sp, #24]
c022a3bc: e58dc01c str ip, [sp, #28]
c022a3c0: e58dc020 str ip, [sp, #32]
c022a3c4: e58de024 str lr, [sp, #36] ; 0x24
ret = udp_sendmsg(NULL, sk, &msg, 0);
c022a3c8: ebfffffe bl c0228ff0 <udp_sendmsg>
c022a3c8: R_ARM_CALL udp_sendmsg
if (ret < 0)
c022a3cc: e3500000 cmp r0, #0
c022a3d0: ba00001d blt c022a44c <udp_sendpage+0xe4>
lock_sock_nested(sk, 0);
c022a3d4: e1a00004 mov r0, r4
c022a3d8: e3a01000 mov r1, #0
c022a3dc: ebfffffe bl 0 <lock_sock_nested>
c022a3dc: R_ARM_CALL lock_sock_nested
if (unlikely(!up->pending)) {
c022a3e0: e59431e8 ldr r3, [r4, #488] ; 0x1e8
c022a3e4: e3530000 cmp r3, #0
c022a3e8: 0a000029 beq c022a494 <udp_sendpage+0x12c>
ret = ip_append_page(sk, &inet->cork.fl.u.ip4,
c022a3ec: e58d7000 str r7, [sp]
c022a3f0: e58d6004 str r6, [sp, #4]
c022a3f4: e1a00004 mov r0, r4
c022a3f8: e2841f6a add r1, r4, #424 ; 0x1a8
c022a3fc: e1a02009 mov r2, r9
c022a400: e1a03008 mov r3, r8
c022a404: ebfffffe bl 0 <ip_append_page>
c022a404: R_ARM_CALL ip_append_page
if (ret == -EOPNOTSUPP) {
c022a408: e370005f cmn r0, #95 ; 0x5f
ret = ip_append_page(sk, &inet->cork.fl.u.ip4,
c022a40c: e1a05000 mov r5, r0
if (ret == -EOPNOTSUPP) {
c022a410: 0a00002a beq c022a4c0 <udp_sendpage+0x158>
if (ret < 0) {
c022a414: e3500000 cmp r0, #0
c022a418: ba000013 blt c022a46c <udp_sendpage+0x104>
up->len += size;
c022a41c: e2842e1f add r2, r4, #496 ; 0x1f0
c022a420: e1d230b2 ldrh r3, [r2, #2]
c022a424: e0873003 add r3, r7, r3
c022a428: e1c230b2 strh r3, [r2, #2]
if (!(up->corkflag || (flags&MSG_MORE)))
c022a42c: e59431ec ldr r3, [r4, #492] ; 0x1ec
c022a430: e3530000 cmp r3, #0
c022a434: 0a000006 beq c022a454 <udp_sendpage+0xec>
ret = size;
c022a438: e3550000 cmp r5, #0
c022a43c: 01a05007 moveq r5, r7
release_sock(sk);
c022a440: e1a00004 mov r0, r4
c022a444: ebfffffe bl 0 <release_sock>
c022a444: R_ARM_CALL release_sock
return ret;
c022a448: e1a00005 mov r0, r5
}
c022a44c: e28dd02c add sp, sp, #44 ; 0x2c
c022a450: e8bd83f0 pop {r4, r5, r6, r7, r8, r9, pc}
if (!(up->corkflag || (flags&MSG_MORE)))
c022a454: e3160902 tst r6, #32768 ; 0x8000
c022a458: 1afffff6 bne c022a438 <udp_sendpage+0xd0>
ret = udp_push_pending_frames(sk);
c022a45c: e1a00004 mov r0, r4
c022a460: ebfffffe bl c02283a8 <udp_push_pending_frames>
c022a460: R_ARM_CALL udp_push_pending_frames
c022a464: e1a05000 mov r5, r0
c022a468: eafffff2 b c022a438 <udp_sendpage+0xd0>
if (up->pending) {
c022a46c: e59431e8 ldr r3, [r4, #488] ; 0x1e8
c022a470: e3530000 cmp r3, #0
c022a474: 0afffff1 beq c022a440 <udp_sendpage+0xd8>
up->len = 0;
c022a478: e3a03000 mov r3, #0
c022a47c: e2842e1f add r2, r4, #496 ; 0x1f0
c022a480: e1c230b2 strh r3, [r2, #2]
ip_flush_pending_frames(sk);
c022a484: e1a00004 mov r0, r4
up->pending = 0;
c022a488: e58431e8 str r3, [r4, #488] ; 0x1e8
ip_flush_pending_frames(sk);
c022a48c: ebfffffe bl 0 <ip_flush_pending_frames>
c022a48c: R_ARM_CALL ip_flush_pending_frames
c022a490: eaffffea b c022a440 <udp_sendpage+0xd8>
release_sock(sk);
c022a494: e1a00004 mov r0, r4
c022a498: ebfffffe bl 0 <release_sock>
c022a498: R_ARM_CALL release_sock
LIMIT_NETDEBUG(KERN_DEBUG pr_fmt("udp cork app bug 3\n"));
c022a49c: e59f304c ldr r3, [pc, #76] ; c022a4f0 <udp_sendpage+0x188>
c022a4a0: e5933000 ldr r3, [r3]
c022a4a4: e3530000 cmp r3, #0
c022a4a8: 0a000002 beq c022a4b8 <udp_sendpage+0x150>
c022a4ac: ebfffffe bl 0 <net_ratelimit>
c022a4ac: R_ARM_CALL net_ratelimit
c022a4b0: e3500000 cmp r0, #0
c022a4b4: 1a00000a bne c022a4e4 <udp_sendpage+0x17c>
return -EINVAL;
c022a4b8: e3e00015 mvn r0, #21
c022a4bc: eaffffe2 b c022a44c <udp_sendpage+0xe4>
release_sock(sk);
c022a4c0: e1a00004 mov r0, r4
c022a4c4: ebfffffe bl 0 <release_sock>
c022a4c4: R_ARM_CALL release_sock
return sock_no_sendpage(sk->sk_socket, page, offset,
c022a4c8: e5940118 ldr r0, [r4, #280] ; 0x118
c022a4cc: e1a01009 mov r1, r9
c022a4d0: e58d6000 str r6, [sp]
c022a4d4: e1a02008 mov r2, r8
c022a4d8: e1a03007 mov r3, r7
c022a4dc: ebfffffe bl 0 <sock_no_sendpage>
c022a4dc: R_ARM_CALL sock_no_sendpage
c022a4e0: eaffffd9 b c022a44c <udp_sendpage+0xe4>
LIMIT_NETDEBUG(KERN_DEBUG pr_fmt("udp cork app bug 3\n"));
c022a4e4: e59f0008 ldr r0, [pc, #8] ; c022a4f4 <udp_sendpage+0x18c>
c022a4e8: ebfffffe bl 0 <printk>
c022a4e8: R_ARM_CALL printk
c022a4ec: eafffff1 b c022a4b8 <udp_sendpage+0x150>
c022a4f0: 00000000 .word 0x00000000
c022a4f0: R_ARM_ABS32 net_msg_warn
c022a4f4: 00000104 .word 0x00000104
c022a4f4: R_ARM_ABS32 .rodata.str1.4
c022a4f8 <__udp4_lib_err>:
{
c022a4f8: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr}
c022a4fc: e1a06000 mov r6, r0
const struct iphdr *iph = (const struct iphdr *)skb->data;
c022a500: e590c094 ldr ip, [r0, #148] ; 0x94
return skb->transport_header;
c022a504: e590007c ldr r0, [r0, #124] ; 0x7c
struct udphdr *uh = (struct udphdr *)(skb->data+(iph->ihl<<2));
c022a508: e5dc3000 ldrb r3, [ip]
sk = __udp4_lib_lookup(net, iph->daddr, uh->dest,
c022a50c: e5968014 ldr r8, [r6, #20]
struct udphdr *uh = (struct udphdr *)(skb->data+(iph->ihl<<2));
c022a510: e203300f and r3, r3, #15
c022a514: e1a03103 lsl r3, r3, #2
sk = __udp4_lib_lookup(net, iph->daddr, uh->dest,
c022a518: e19ca0b3 ldrh sl, [ip, r3]
{
c022a51c: e24dd010 sub sp, sp, #16
struct udphdr *uh = (struct udphdr *)(skb->data+(iph->ihl<<2));
c022a520: e08c4003 add r4, ip, r3
sk = __udp4_lib_lookup(net, iph->daddr, uh->dest,
c022a524: e59c5010 ldr r5, [ip, #16]
c022a528: e1d4e0b2 ldrh lr, [r4, #2]
const int type = icmp_hdr(skb)->type;
c022a52c: e5d07000 ldrb r7, [r0]
const int code = icmp_hdr(skb)->code;
c022a530: e5d09001 ldrb r9, [r0, #1]
sk = __udp4_lib_lookup(net, iph->daddr, uh->dest,
c022a534: e59c300c ldr r3, [ip, #12]
c022a538: e58da000 str sl, [sp]
c022a53c: e59800b0 ldr r0, [r8, #176] ; 0xb0
c022a540: e59f8158 ldr r8, [pc, #344] ; c022a6a0 <__udp4_lib_err+0x1a8>
c022a544: e98d0005 stmib sp, {r0, r2}
{
c022a548: e1a0a001 mov sl, r1
sk = __udp4_lib_lookup(net, iph->daddr, uh->dest,
c022a54c: e1a00008 mov r0, r8
c022a550: e1a01005 mov r1, r5
c022a554: e1a0200e mov r2, lr
c022a558: ebfffffe bl c0229f64 <__udp4_lib_lookup>
c022a558: R_ARM_CALL __udp4_lib_lookup
if (sk == NULL) {
c022a55c: e2505000 subs r5, r0, #0
c022a560: 0a000048 beq c022a688 <__udp4_lib_err+0x190>
switch (type) {
c022a564: e3570004 cmp r7, #4
c022a568: 0a000007 beq c022a58c <__udp4_lib_err+0x94>
c022a56c: e357000c cmp r7, #12
c022a570: 0a000010 beq c022a5b8 <__udp4_lib_err+0xc0>
c022a574: e3570003 cmp r7, #3
c022a578: 0a00001e beq c022a5f8 <__udp4_lib_err+0x100>
if (!inet->recverr) {
c022a57c: e5d53170 ldrb r3, [r5, #368] ; 0x170
c022a580: e3130001 tst r3, #1
c022a584: 13a07071 movne r7, #113 ; 0x71
c022a588: 1a00002c bne c022a640 <__udp4_lib_err+0x148>
asm volatile(
c022a58c: e10f2000 mrs r2, CPSR
c022a590: e3823080 orr r3, r2, #128 ; 0x80
c022a594: e121f003 msr CPSR_c, r3
val = v->counter;
c022a598: e595302c ldr r3, [r5, #44] ; 0x2c
v->counter = val -= i;
c022a59c: e2433001 sub r3, r3, #1
c022a5a0: e585302c str r3, [r5, #44] ; 0x2c
asm volatile(
c022a5a4: e121f002 msr CPSR_c, r2
if (atomic_dec_and_test(&sk->sk_refcnt))
c022a5a8: e3530000 cmp r3, #0
c022a5ac: 0a00000d beq c022a5e8 <__udp4_lib_err+0xf0>
}
c022a5b0: e28dd010 add sp, sp, #16
c022a5b4: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc}
err = EPROTO;
c022a5b8: e3a07047 mov r7, #71 ; 0x47
if (!inet->recverr) {
c022a5bc: e5d53170 ldrb r3, [r5, #368] ; 0x170
c022a5c0: e3130001 tst r3, #1
c022a5c4: 1a00001d bne c022a640 <__udp4_lib_err+0x148>
if (!harderr || sk->sk_state != TCP_ESTABLISHED)
c022a5c8: e5d5300e ldrb r3, [r5, #14]
c022a5cc: e3530001 cmp r3, #1
c022a5d0: 1affffed bne c022a58c <__udp4_lib_err+0x94>
sk->sk_err = err;
c022a5d4: e58570cc str r7, [r5, #204] ; 0xcc
sk->sk_error_report(sk);
c022a5d8: e595314c ldr r3, [r5, #332] ; 0x14c
c022a5dc: e1a00005 mov r0, r5
c022a5e0: e12fff33 blx r3
c022a5e4: eaffffe8 b c022a58c <__udp4_lib_err+0x94>
sk_free(sk);
c022a5e8: e1a00005 mov r0, r5
}
c022a5ec: e28dd010 add sp, sp, #16
c022a5f0: e8bd47f0 pop {r4, r5, r6, r7, r8, r9, sl, lr}
c022a5f4: eafffffe b 0 <sk_free>
c022a5f4: R_ARM_JUMP24 sk_free
if (code == ICMP_FRAG_NEEDED) { /* Path MTU discovery */
c022a5f8: e3590004 cmp r9, #4
c022a5fc: 0a00001c beq c022a674 <__udp4_lib_err+0x17c>
if (code <= NR_ICMP_UNREACH) {
c022a600: e359000f cmp r9, #15
c022a604: caffffdc bgt c022a57c <__udp4_lib_err+0x84>
harderr = icmp_err_convert[code].fatal;
c022a608: e59f2094 ldr r2, [pc, #148] ; c022a6a4 <__udp4_lib_err+0x1ac>
if (!inet->recverr) {
c022a60c: e5d51170 ldrb r1, [r5, #368] ; 0x170
harderr = icmp_err_convert[code].fatal;
c022a610: e0823189 add r3, r2, r9, lsl #3
c022a614: e5d33004 ldrb r3, [r3, #4]
if (!inet->recverr) {
c022a618: e3110001 tst r1, #1
harderr = icmp_err_convert[code].fatal;
c022a61c: e2033001 and r3, r3, #1
err = icmp_err_convert[code].errno;
c022a620: e7927189 ldr r7, [r2, r9, lsl #3]
if (!inet->recverr) {
c022a624: 1a000005 bne c022a640 <__udp4_lib_err+0x148>
if (!harderr || sk->sk_state != TCP_ESTABLISHED)
c022a628: e3530000 cmp r3, #0
c022a62c: 0affffd6 beq c022a58c <__udp4_lib_err+0x94>
c022a630: e5d5300e ldrb r3, [r5, #14]
c022a634: e3530001 cmp r3, #1
c022a638: 1affffd3 bne c022a58c <__udp4_lib_err+0x94>
c022a63c: eaffffe4 b c022a5d4 <__udp4_lib_err+0xdc>
ip_icmp_error(sk, skb, err, uh->dest, info, (u8 *)(uh+1));
c022a640: e1d430b2 ldrh r3, [r4, #2]
c022a644: e2844008 add r4, r4, #8
c022a648: e1a00005 mov r0, r5
c022a64c: e1a01006 mov r1, r6
c022a650: e58d4004 str r4, [sp, #4]
c022a654: e58da000 str sl, [sp]
c022a658: e1a02007 mov r2, r7
c022a65c: ebfffffe bl 0 <ip_icmp_error>
c022a65c: R_ARM_CALL ip_icmp_error
sk->sk_err = err;
c022a660: e58570cc str r7, [r5, #204] ; 0xcc
sk->sk_error_report(sk);
c022a664: e595314c ldr r3, [r5, #332] ; 0x14c
c022a668: e1a00005 mov r0, r5
c022a66c: e12fff33 blx r3
c022a670: eaffffc5 b c022a58c <__udp4_lib_err+0x94>
if (inet->pmtudisc != IP_PMTUDISC_DONT) {
c022a674: e5d5316f ldrb r3, [r5, #367] ; 0x16f
c022a678: e3530000 cmp r3, #0
c022a67c: 0affffc2 beq c022a58c <__udp4_lib_err+0x94>
err = EMSGSIZE;
c022a680: e3a0705a mov r7, #90 ; 0x5a
c022a684: eaffffcc b c022a5bc <__udp4_lib_err+0xc4>
ICMP_INC_STATS_BH(net, ICMP_MIB_INERRORS);
c022a688: e59820a0 ldr r2, [r8, #160] ; 0xa0
c022a68c: e5923008 ldr r3, [r2, #8]
c022a690: e2833001 add r3, r3, #1
c022a694: e5823008 str r3, [r2, #8]
}
c022a698: e28dd010 add sp, sp, #16
c022a69c: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc}
...
c022a6a0: R_ARM_ABS32 init_net
c022a6a4: R_ARM_ABS32 icmp_err_convert
c022a6a8 <udp_err>:
__udp4_lib_err(skb, info, &udp_table);
c022a6a8: e59f2000 ldr r2, [pc] ; c022a6b0 <udp_err+0x8>
c022a6ac: eafffffe b c022a4f8 <__udp4_lib_err>
c022a6ac: R_ARM_JUMP24 __udp4_lib_err
c022a6b0: 00000000 .word 0x00000000
c022a6b0: R_ARM_ABS32 .data..read_mostly
c022a6b4 <udp_queue_rcv_skb>:
{
c022a6b4: e92d40f8 push {r3, r4, r5, r6, r7, lr}
if (up->encap_type) {
c022a6b8: e2803e1f add r3, r0, #496 ; 0x1f0
c022a6bc: e1d330b0 ldrh r3, [r3]
{
c022a6c0: e1a04000 mov r4, r0
if (up->encap_type) {
c022a6c4: e3530000 cmp r3, #0
int is_udplite = IS_UDPLITE(sk);
c022a6c8: e5d061f8 ldrb r6, [r0, #504] ; 0x1f8
{
c022a6cc: e1a05001 mov r5, r1
if (up->encap_type) {
c022a6d0: 0a000007 beq c022a6f4 <udp_queue_rcv_skb+0x40>
encap_rcv = ACCESS_ONCE(up->encap_rcv);
c022a6d4: e59031fc ldr r3, [r0, #508] ; 0x1fc
if (skb->len > sizeof(struct udphdr) && encap_rcv != NULL) {
c022a6d8: e591204c ldr r2, [r1, #76] ; 0x4c
c022a6dc: e3530000 cmp r3, #0
c022a6e0: 13520008 cmpne r2, #8
c022a6e4: 9a000002 bls c022a6f4 <udp_queue_rcv_skb+0x40>
ret = encap_rcv(sk, skb);
c022a6e8: e12fff33 blx r3
if (ret <= 0) {
c022a6ec: e3500000 cmp r0, #0
c022a6f0: da000081 ble c022a8fc <udp_queue_rcv_skb+0x248>
if ((is_udplite & UDPLITE_RECV_CC) && UDP_SKB_CB(skb)->partial_cov) {
c022a6f4: e3160004 tst r6, #4
c022a6f8: 1a000034 bne c022a7d0 <udp_queue_rcv_skb+0x11c>
if (rcu_access_pointer(sk->sk_filter) &&
c022a6fc: e5943064 ldr r3, [r4, #100] ; 0x64
c022a700: e3530000 cmp r3, #0
c022a704: 0a000002 beq c022a714 <udp_queue_rcv_skb+0x60>
return skb->ip_summed & CHECKSUM_UNNECESSARY;
c022a708: e5d53060 ldrb r3, [r5, #96] ; 0x60
return !skb_csum_unnecessary(skb) &&
c022a70c: e3130004 tst r3, #4
c022a710: 0a000061 beq c022a89c <udp_queue_rcv_skb+0x1e8>
unsigned int qsize = sk->sk_backlog.len + atomic_read(&sk->sk_rmem_alloc);
c022a714: e5943048 ldr r3, [r4, #72] ; 0x48
c022a718: e594104c ldr r1, [r4, #76] ; 0x4c
if (sk_rcvqueues_full(sk, skb))
c022a71c: e5942060 ldr r2, [r4, #96] ; 0x60
c022a720: e0833001 add r3, r3, r1
c022a724: e1530002 cmp r3, r2
c022a728: 8a000016 bhi c022a788 <udp_queue_rcv_skb+0xd4>
c022a72c: e1a0300d mov r3, sp
ipv4_pktinfo_prepare(skb);
c022a730: e1a00005 mov r0, r5
c022a734: e3c37d7f bic r7, r3, #8128 ; 0x1fc0
c022a738: ebfffffe bl 0 <ipv4_pktinfo_prepare>
c022a738: R_ARM_CALL ipv4_pktinfo_prepare
c022a73c: e3c7303f bic r3, r7, #63 ; 0x3f
raw_spin_lock(&lock->rlock);
c022a740: e5932004 ldr r2, [r3, #4]
c022a744: e2822001 add r2, r2, #1
c022a748: e5832004 str r2, [r3, #4]
if (!sock_owned_by_user(sk))
c022a74c: e5942030 ldr r2, [r4, #48] ; 0x30
c022a750: e3520000 cmp r2, #0
c022a754: 0a00004b beq c022a888 <udp_queue_rcv_skb+0x1d4>
c022a758: e5942048 ldr r2, [r4, #72] ; 0x48
c022a75c: e594004c ldr r0, [r4, #76] ; 0x4c
if (sk_rcvqueues_full(sk, skb))
c022a760: e5941060 ldr r1, [r4, #96] ; 0x60
unsigned int qsize = sk->sk_backlog.len + atomic_read(&sk->sk_rmem_alloc);
c022a764: e0822000 add r2, r2, r0
if (sk_rcvqueues_full(sk, skb))
c022a768: e1520001 cmp r2, r1
c022a76c: 9a00002d bls c022a828 <udp_queue_rcv_skb+0x174>
raw_spin_unlock(&lock->rlock);
c022a770: e5932004 ldr r2, [r3, #4]
c022a774: e2422001 sub r2, r2, #1
c022a778: e5832004 str r2, [r3, #4]
c022a77c: e5933000 ldr r3, [r3]
c022a780: e3130002 tst r3, #2
c022a784: 1a000071 bne c022a950 <udp_queue_rcv_skb+0x29c>
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS, is_udplite);
c022a788: e59f31c8 ldr r3, [pc, #456] ; c022a958 <udp_queue_rcv_skb+0x2a4>
c022a78c: e3560000 cmp r6, #0
c022a790: 1593209c ldrne r2, [r3, #156] ; 0x9c
c022a794: 05932098 ldreq r2, [r3, #152] ; 0x98
c022a798: e592300c ldr r3, [r2, #12]
c022a79c: e2833001 add r3, r3, #1
c022a7a0: e582300c str r3, [r2, #12]
asm volatile(
c022a7a4: e10f2000 mrs r2, CPSR
c022a7a8: e3823080 orr r3, r2, #128 ; 0x80
c022a7ac: e121f003 msr CPSR_c, r3
val = v->counter;
c022a7b0: e594305c ldr r3, [r4, #92] ; 0x5c
v->counter = val += i;
c022a7b4: e2833001 add r3, r3, #1
c022a7b8: e584305c str r3, [r4, #92] ; 0x5c
asm volatile(
c022a7bc: e121f002 msr CPSR_c, r2
kfree_skb(skb);
c022a7c0: e1a00005 mov r0, r5
c022a7c4: ebfffffe bl 0 <kfree_skb>
c022a7c4: R_ARM_CALL kfree_skb
return -1;
c022a7c8: e3e00000 mvn r0, #0
c022a7cc: e8bd80f8 pop {r3, r4, r5, r6, r7, pc}
if ((is_udplite & UDPLITE_RECV_CC) && UDP_SKB_CB(skb)->partial_cov) {
c022a7d0: e5d5302e ldrb r3, [r5, #46] ; 0x2e
c022a7d4: e3530000 cmp r3, #0
c022a7d8: 0affffc7 beq c022a6fc <udp_queue_rcv_skb+0x48>
if (up->pcrlen == 0) { /* full coverage was set */
c022a7dc: e2847f7d add r7, r4, #500 ; 0x1f4
c022a7e0: e1d730b2 ldrh r3, [r7, #2]
c022a7e4: e3530000 cmp r3, #0
c022a7e8: 0a00004c beq c022a920 <udp_queue_rcv_skb+0x26c>
if (UDP_SKB_CB(skb)->cscov < up->pcrlen) {
c022a7ec: e1d522bc ldrh r2, [r5, #44] ; 0x2c
c022a7f0: e1520003 cmp r2, r3
c022a7f4: 2affffc0 bcs c022a6fc <udp_queue_rcv_skb+0x48>
LIMIT_NETDEBUG(KERN_WARNING "UDPLite: coverage %d too small, need min %d\n",
c022a7f8: e59f315c ldr r3, [pc, #348] ; c022a95c <udp_queue_rcv_skb+0x2a8>
c022a7fc: e5933000 ldr r3, [r3]
c022a800: e3530000 cmp r3, #0
c022a804: 0affffdf beq c022a788 <udp_queue_rcv_skb+0xd4>
c022a808: ebfffffe bl 0 <net_ratelimit>
c022a808: R_ARM_CALL net_ratelimit
c022a80c: e3500000 cmp r0, #0
c022a810: 0affffdc beq c022a788 <udp_queue_rcv_skb+0xd4>
c022a814: e1d720b2 ldrh r2, [r7, #2]
c022a818: e1d512bc ldrh r1, [r5, #44] ; 0x2c
c022a81c: e59f013c ldr r0, [pc, #316] ; c022a960 <udp_queue_rcv_skb+0x2ac>
c022a820: ebfffffe bl 0 <printk>
c022a820: R_ARM_CALL printk
c022a824: eaffffd7 b c022a788 <udp_queue_rcv_skb+0xd4>
return (skb->_skb_refdst & SKB_DST_NOREF) && skb_dst(skb);
c022a828: e5953048 ldr r3, [r5, #72] ; 0x48
c022a82c: e3130001 tst r3, #1
c022a830: 1a00001f bne c022a8b4 <udp_queue_rcv_skb+0x200>
skb->next = NULL;
c022a834: e3a00000 mov r0, #0
if (!sk->sk_backlog.tail)
c022a838: e5943054 ldr r3, [r4, #84] ; 0x54
c022a83c: e3530000 cmp r3, #0
sk->sk_backlog.tail->next = skb;
c022a840: 15835000 strne r5, [r3]
sk->sk_backlog.head = skb;
c022a844: 05845050 streq r5, [r4, #80] ; 0x50
sk->sk_backlog.tail = skb;
c022a848: e5845054 str r5, [r4, #84] ; 0x54
sk->sk_backlog.len += skb->truesize;
c022a84c: e5952098 ldr r2, [r5, #152] ; 0x98
skb->next = NULL;
c022a850: e5850000 str r0, [r5]
rc = 0;
c022a854: e1a05000 mov r5, r0
sk->sk_backlog.len += skb->truesize;
c022a858: e594304c ldr r3, [r4, #76] ; 0x4c
c022a85c: e0833002 add r3, r3, r2
c022a860: e584304c str r3, [r4, #76] ; 0x4c
c022a864: e3c7303f bic r3, r7, #63 ; 0x3f
c022a868: e5932004 ldr r2, [r3, #4]
c022a86c: e2422001 sub r2, r2, #1
c022a870: e5832004 str r2, [r3, #4]
c022a874: e5933000 ldr r3, [r3]
c022a878: e3130002 tst r3, #2
c022a87c: 1a00001b bne c022a8f0 <udp_queue_rcv_skb+0x23c>
return rc;
c022a880: e1a00005 mov r0, r5
c022a884: e8bd80f8 pop {r3, r4, r5, r6, r7, pc}
rc = __udp_queue_rcv_skb(sk, skb);
c022a888: e1a01005 mov r1, r5
c022a88c: e1a00004 mov r0, r4
c022a890: ebfff918 bl c0228cf8 <__udp_queue_rcv_skb>
c022a894: e1a05000 mov r5, r0
c022a898: eafffff1 b c022a864 <udp_queue_rcv_skb+0x1b0>
return __skb_checksum_complete_head(skb, UDP_SKB_CB(skb)->cscov);
c022a89c: e1a00005 mov r0, r5
c022a8a0: e1d512bc ldrh r1, [r5, #44] ; 0x2c
c022a8a4: ebfffffe bl 0 <__skb_checksum_complete_head>
c022a8a4: R_ARM_CALL __skb_checksum_complete_head
return !skb_csum_unnecessary(skb) &&
c022a8a8: e3500000 cmp r0, #0
c022a8ac: 1affffb5 bne c022a788 <udp_queue_rcv_skb+0xd4>
c022a8b0: eaffff97 b c022a714 <udp_queue_rcv_skb+0x60>
c022a8b4: e3d33001 bics r3, r3, #1
c022a8b8: 0affffdd beq c022a834 <udp_queue_rcv_skb+0x180>
skb->_skb_refdst &= ~SKB_DST_NOREF;
c022a8bc: e5853048 str r3, [r5, #72] ; 0x48
asm volatile(
c022a8c0: e10f1000 mrs r1, CPSR
c022a8c4: e3812080 orr r2, r1, #128 ; 0x80
c022a8c8: e121f002 msr CPSR_c, r2
val = v->counter;
c022a8cc: e1d304b2 ldrh r0, [r3, #66] ; 0x42
c022a8d0: e1d324b0 ldrh r2, [r3, #64] ; 0x40
c022a8d4: e1822800 orr r2, r2, r0, lsl #16
v->counter = val += i;
c022a8d8: e2822001 add r2, r2, #1
c022a8dc: e1a00822 lsr r0, r2, #16
c022a8e0: e1c324b0 strh r2, [r3, #64] ; 0x40
c022a8e4: e1c304b2 strh r0, [r3, #66] ; 0x42
asm volatile(
c022a8e8: e121f001 msr CPSR_c, r1
c022a8ec: eaffffd0 b c022a834 <udp_queue_rcv_skb+0x180>
c022a8f0: ebfffffe bl 0 <preempt_schedule>
c022a8f0: R_ARM_CALL preempt_schedule
return rc;
c022a8f4: e1a00005 mov r0, r5
c022a8f8: e8bd80f8 pop {r3, r4, r5, r6, r7, pc}
UDP_INC_STATS_BH(sock_net(sk),
c022a8fc: e59f3054 ldr r3, [pc, #84] ; c022a958 <udp_queue_rcv_skb+0x2a4>
c022a900: e3560000 cmp r6, #0
c022a904: 1593209c ldrne r2, [r3, #156] ; 0x9c
c022a908: 05932098 ldreq r2, [r3, #152] ; 0x98
return -ret;
c022a90c: e2600000 rsb r0, r0, #0
UDP_INC_STATS_BH(sock_net(sk),
c022a910: e5923004 ldr r3, [r2, #4]
c022a914: e2833001 add r3, r3, #1
c022a918: e5823004 str r3, [r2, #4]
return -ret;
c022a91c: e8bd80f8 pop {r3, r4, r5, r6, r7, pc}
LIMIT_NETDEBUG(KERN_WARNING "UDPLite: partial coverage %d while full coverage %d requested\n",
c022a920: e59f3034 ldr r3, [pc, #52] ; c022a95c <udp_queue_rcv_skb+0x2a8>
c022a924: e5933000 ldr r3, [r3]
c022a928: e3530000 cmp r3, #0
c022a92c: 0affff95 beq c022a788 <udp_queue_rcv_skb+0xd4>
c022a930: ebfffffe bl 0 <net_ratelimit>
c022a930: R_ARM_CALL net_ratelimit
c022a934: e3500000 cmp r0, #0
c022a938: 0affff92 beq c022a788 <udp_queue_rcv_skb+0xd4>
c022a93c: e1d512bc ldrh r1, [r5, #44] ; 0x2c
c022a940: e595204c ldr r2, [r5, #76] ; 0x4c
c022a944: e59f0018 ldr r0, [pc, #24] ; c022a964 <udp_queue_rcv_skb+0x2b0>
c022a948: ebfffffe bl 0 <printk>
c022a948: R_ARM_CALL printk
c022a94c: eaffff8d b c022a788 <udp_queue_rcv_skb+0xd4>
c022a950: ebfffffe bl 0 <preempt_schedule>
c022a950: R_ARM_CALL preempt_schedule
c022a954: eaffff8b b c022a788 <udp_queue_rcv_skb+0xd4>
...
c022a958: R_ARM_ABS32 init_net
c022a95c: R_ARM_ABS32 net_msg_warn
c022a960: 00000164 .word 0x00000164
c022a960: R_ARM_ABS32 .rodata.str1.4
c022a964: 00000120 .word 0x00000120
c022a964: R_ARM_ABS32 .rodata.str1.4
c022a968 <flush_stack>:
for (i = 0; i < count; i++) {
c022a968: e3510000 cmp r1, #0
c022a96c: 012fff1e bxeq lr
{
c022a970: e92d4ff8 push {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr}
for (i = 0; i < count; i++) {
c022a974: e3a04000 mov r4, #0
c022a978: e1a0a003 mov sl, r3
c022a97c: e1a09002 mov r9, r2
c022a980: e1a08001 mov r8, r1
c022a984: e1a05004 mov r5, r4
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS,
c022a988: e59fb0dc ldr fp, [pc, #220] ; c022aa6c <flush_stack+0x104>
c022a98c: e2406004 sub r6, r0, #4
c022a990: ea000002 b c022a9a0 <flush_stack+0x38>
for (i = 0; i < count; i++) {
c022a994: e2855001 add r5, r5, #1
c022a998: e1550008 cmp r5, r8
c022a99c: 0a000013 beq c022a9f0 <flush_stack+0x88>
if (likely(skb1 == NULL))
c022a9a0: e3540000 cmp r4, #0
sk = stack[i];
c022a9a4: e5b67004 ldr r7, [r6, #4]!
if (likely(skb1 == NULL))
c022a9a8: 1a000007 bne c022a9cc <flush_stack+0x64>
skb1 = (i == final) ? skb : skb_clone(skb, GFP_ATOMIC);
c022a9ac: e155000a cmp r5, sl
c022a9b0: 0a00002b beq c022aa64 <flush_stack+0xfc>
c022a9b4: e1a00009 mov r0, r9
c022a9b8: e3a01020 mov r1, #32
c022a9bc: ebfffffe bl 0 <skb_clone>
c022a9bc: R_ARM_CALL skb_clone
c022a9c0: e1a04000 mov r4, r0
if (!skb1) {
c022a9c4: e3540000 cmp r4, #0
c022a9c8: 0a00000d beq c022aa04 <flush_stack+0x9c>
if (skb1 && udp_queue_rcv_skb(sk, skb1) <= 0)
c022a9cc: e1a00007 mov r0, r7
c022a9d0: e1a01004 mov r1, r4
c022a9d4: ebfffffe bl c022a6b4 <udp_queue_rcv_skb>
c022a9d4: R_ARM_CALL udp_queue_rcv_skb
c022a9d8: e3500000 cmp r0, #0
c022a9dc: caffffec bgt c022a994 <flush_stack+0x2c>
skb1 = NULL;
c022a9e0: e3a04000 mov r4, #0
for (i = 0; i < count; i++) {
c022a9e4: e2855001 add r5, r5, #1
c022a9e8: e1550008 cmp r5, r8
c022a9ec: 1affffeb bne c022a9a0 <flush_stack+0x38>
if (unlikely(skb1))
c022a9f0: e3540000 cmp r4, #0
c022a9f4: 08bd8ff8 popeq {r3, r4, r5, r6, r7, r8, r9, sl, fp, pc}
kfree_skb(skb1);
c022a9f8: e1a00004 mov r0, r4
}
c022a9fc: e8bd4ff8 pop {r3, r4, r5, r6, r7, r8, r9, sl, fp, lr}
kfree_skb(skb1);
c022aa00: eafffffe b 0 <kfree_skb>
c022aa00: R_ARM_JUMP24 kfree_skb
asm volatile(
c022aa04: e10f2000 mrs r2, CPSR
c022aa08: e3823080 orr r3, r2, #128 ; 0x80
c022aa0c: e121f003 msr CPSR_c, r3
val = v->counter;
c022aa10: e597305c ldr r3, [r7, #92] ; 0x5c
v->counter = val += i;
c022aa14: e2833001 add r3, r3, #1
c022aa18: e587305c str r3, [r7, #92] ; 0x5c
asm volatile(
c022aa1c: e121f002 msr CPSR_c, r2
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS,
c022aa20: e5d731f8 ldrb r3, [r7, #504] ; 0x1f8
skb1 = NULL;
c022aa24: e3a04000 mov r4, #0
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_RCVBUFERRORS,
c022aa28: e3530000 cmp r3, #0
c022aa2c: 159b109c ldrne r1, [fp, #156] ; 0x9c
c022aa30: 059b1098 ldreq r1, [fp, #152] ; 0x98
c022aa34: e59f3030 ldr r3, [pc, #48] ; c022aa6c <flush_stack+0x104>
c022aa38: e5912014 ldr r2, [r1, #20]
c022aa3c: e2822001 add r2, r2, #1
c022aa40: e5812014 str r2, [r1, #20]
UDP_INC_STATS_BH(sock_net(sk), UDP_MIB_INERRORS,
c022aa44: e5d721f8 ldrb r2, [r7, #504] ; 0x1f8
c022aa48: e3520000 cmp r2, #0
c022aa4c: 1593209c ldrne r2, [r3, #156] ; 0x9c
c022aa50: 05932098 ldreq r2, [r3, #152] ; 0x98
c022aa54: e592300c ldr r3, [r2, #12]
c022aa58: e2833001 add r3, r3, #1
c022aa5c: e582300c str r3, [r2, #12]
c022aa60: eaffffdf b c022a9e4 <flush_stack+0x7c>
skb1 = (i == final) ? skb : skb_clone(skb, GFP_ATOMIC);
c022aa64: e1a04009 mov r4, r9
c022aa68: eaffffd5 b c022a9c4 <flush_stack+0x5c>
c022aa6c: 00000000 .word 0x00000000
c022aa6c: R_ARM_ABS32 init_net
c022aa70 <__udp4_lib_mcast_deliver.constprop.6>:
static int __udp4_lib_mcast_deliver(struct net *net, struct sk_buff *skb,
c022aa70: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
c022aa74: e24ddf45 sub sp, sp, #276 ; 0x114
c022aa78: e1a0e001 mov lr, r1
c022aa7c: e58d1000 str r1, [sp]
c022aa80: e1a0100d mov r1, sp
c022aa84: e3c1cd7f bic ip, r1, #8128 ; 0x1fc0
c022aa88: e1a0100c mov r1, ip
c022aa8c: e58dc00c str ip, [sp, #12]
struct udp_hslot *hslot = udp_hashslot(udptable, net, ntohs(uh->dest));
c022aa90: e1dec0b2 ldrh ip, [lr, #2]
c022aa94: e3c1403f bic r4, r1, #63 ; 0x3f
static int __udp4_lib_mcast_deliver(struct net *net, struct sk_buff *skb,
c022aa98: e59d5138 ldr r5, [sp, #312] ; 0x138
raw_spin_lock(&lock->rlock);
c022aa9c: e5946004 ldr r6, [r4, #4]
c022aaa0: e1a0142c lsr r1, ip, #8
c022aaa4: e595e008 ldr lr, [r5, #8]
c022aaa8: e181140c orr r1, r1, ip, lsl #8
c022aaac: e2866001 add r6, r6, #1
struct udp_hslot *hslot = udp_hashslot(udptable, net, ntohs(uh->dest));
c022aab0: e1a01801 lsl r1, r1, #16
static int __udp4_lib_mcast_deliver(struct net *net, struct sk_buff *skb,
c022aab4: e1a0a003 mov sl, r3
c022aab8: e58d0008 str r0, [sp, #8]
return &table->hash[udp_hashfn(net, num, table->mask)];
c022aabc: e5953000 ldr r3, [r5]
c022aac0: e00e1821 and r1, lr, r1, lsr #16
c022aac4: e5846004 str r6, [r4, #4]
return is_a_nulls(h->first);
c022aac8: e7934181 ldr r4, [r3, r1, lsl #3]
return hlist_nulls_empty(head) ? NULL : __sk_nulls_head(head);
c022aacc: e3140001 tst r4, #1
c022aad0: 0a00002a beq c022ab80 <__udp4_lib_mcast_deliver.constprop.6+0x110>
while (sk) {
c022aad4: e3a05000 mov r5, #0
c022aad8: e59d300c ldr r3, [sp, #12]
c022aadc: e3c3303f bic r3, r3, #63 ; 0x3f
raw_spin_unlock(&lock->rlock);
c022aae0: e5932004 ldr r2, [r3, #4]
c022aae4: e2422001 sub r2, r2, #1
c022aae8: e5832004 str r2, [r3, #4]
c022aaec: e5933000 ldr r3, [r3]
c022aaf0: e3130002 tst r3, #2
c022aaf4: 1a0000ab bne c022ada8 <__udp4_lib_mcast_deliver.constprop.6+0x338>
if (count) {
c022aaf8: e3550000 cmp r5, #0
c022aafc: 0a00001a beq c022ab6c <__udp4_lib_mcast_deliver.constprop.6+0xfc>
flush_stack(stack, count, skb, count - 1);
c022ab00: e59d2008 ldr r2, [sp, #8]
c022ab04: e28d0010 add r0, sp, #16
c022ab08: e1a01005 mov r1, r5
c022ab0c: e2453001 sub r3, r5, #1
c022ab10: ebffff94 bl c022a968 <flush_stack>
while (sk) {
c022ab14: e3a04000 mov r4, #0
c022ab18: e28d600c add r6, sp, #12
c022ab1c: ea000001 b c022ab28 <__udp4_lib_mcast_deliver.constprop.6+0xb8>
for (i = 0; i < count; i++)
c022ab20: e1550004 cmp r5, r4
c022ab24: 9a00000d bls c022ab60 <__udp4_lib_mcast_deliver.constprop.6+0xf0>
sock_put(stack[i]);
c022ab28: e5b60004 ldr r0, [r6, #4]!
asm volatile(
c022ab2c: e10f2000 mrs r2, CPSR
c022ab30: e3823080 orr r3, r2, #128 ; 0x80
c022ab34: e121f003 msr CPSR_c, r3
val = v->counter;
c022ab38: e590302c ldr r3, [r0, #44] ; 0x2c
v->counter = val -= i;
c022ab3c: e2433001 sub r3, r3, #1
c022ab40: e580302c str r3, [r0, #44] ; 0x2c
asm volatile(
c022ab44: e121f002 msr CPSR_c, r2
if (atomic_dec_and_test(&sk->sk_refcnt))
c022ab48: e3530000 cmp r3, #0
for (i = 0; i < count; i++)
c022ab4c: e2844001 add r4, r4, #1
c022ab50: 1afffff2 bne c022ab20 <__udp4_lib_mcast_deliver.constprop.6+0xb0>
sk_free(sk);
c022ab54: ebfffffe bl 0 <sk_free>
c022ab54: R_ARM_CALL sk_free
c022ab58: e1550004 cmp r5, r4
c022ab5c: 8afffff1 bhi c022ab28 <__udp4_lib_mcast_deliver.constprop.6+0xb8>
}
c022ab60: e3a00000 mov r0, #0
c022ab64: e28ddf45 add sp, sp, #276 ; 0x114
c022ab68: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
kfree_skb(skb);
c022ab6c: e59d0008 ldr r0, [sp, #8]
c022ab70: ebfffffe bl 0 <kfree_skb>
c022ab70: R_ARM_CALL kfree_skb
}
c022ab74: e3a00000 mov r0, #0
c022ab78: e28ddf45 add sp, sp, #276 ; 0x114
c022ab7c: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
sk = udp_v4_mcast_next(net, sk, uh->dest, daddr, uh->source, saddr, dif);
c022ab80: e59d1000 ldr r1, [sp]
dif = skb->dev->ifindex;
c022ab84: e59d3008 ldr r3, [sp, #8]
sk = udp_v4_mcast_next(net, sk, uh->dest, daddr, uh->source, saddr, dif);
c022ab88: e1d160b2 ldrh r6, [r1, #2]
c022ab8c: e1a08002 mov r8, r2
dif = skb->dev->ifindex;
c022ab90: e5932014 ldr r2, [r3, #20]
c022ab94: e1a03406 lsl r3, r6, #8
c022ab98: e1836426 orr r6, r3, r6, lsr #8
c022ab9c: e1a06806 lsl r6, r6, #16
sk_nulls_for_each_from(s, node) {
c022aba0: e3540020 cmp r4, #32
c022aba4: e1a06826 lsr r6, r6, #16
dif = skb->dev->ifindex;
c022aba8: e59290b0 ldr r9, [r2, #176] ; 0xb0
sk = udp_v4_mcast_next(net, sk, uh->dest, daddr, uh->source, saddr, dif);
c022abac: e1d1b0b0 ldrh fp, [r1]
sk_nulls_for_each_from(s, node) {
c022abb0: 1a000003 bne c022abc4 <__udp4_lib_mcast_deliver.constprop.6+0x154>
c022abb4: eaffffc6 b c022aad4 <__udp4_lib_mcast_deliver.constprop.6+0x64>
c022abb8: e5944000 ldr r4, [r4]
c022abbc: e3140001 tst r4, #1
c022abc0: 1affffc3 bne c022aad4 <__udp4_lib_mcast_deliver.constprop.6+0x64>
if (!net_eq(sock_net(s), net) ||
c022abc4: e15401b8 ldrh r0, [r4, #-24] ; 0xffffffe8
c022abc8: e1500006 cmp r0, r6
c022abcc: 1afffff9 bne c022abb8 <__udp4_lib_mcast_deliver.constprop.6+0x148>
(inet->inet_daddr && inet->inet_daddr != rmt_addr) ||
c022abd0: e5140020 ldr r0, [r4, #-32] ; 0xffffffe0
c022abd4: e1500008 cmp r0, r8
c022abd8: 13500000 cmpne r0, #0
c022abdc: 1afffff5 bne c022abb8 <__udp4_lib_mcast_deliver.constprop.6+0x148>
(inet->inet_dport != rmt_port && inet->inet_dport) ||
c022abe0: e2843f4e add r3, r4, #312 ; 0x138
c022abe4: e1d300b0 ldrh r0, [r3]
c022abe8: e15b0000 cmp fp, r0
c022abec: 13500000 cmpne r0, #0
c022abf0: 1afffff0 bne c022abb8 <__udp4_lib_mcast_deliver.constprop.6+0x148>
(inet->inet_rcv_saddr &&
c022abf4: e514301c ldr r3, [r4, #-28] ; 0xffffffe4
c022abf8: e153000a cmp r3, sl
c022abfc: 13530000 cmpne r3, #0
c022ac00: 1affffec bne c022abb8 <__udp4_lib_mcast_deliver.constprop.6+0x148>
(s->sk_bound_dev_if && s->sk_bound_dev_if != dif))
c022ac04: e5147010 ldr r7, [r4, #-16]
c022ac08: e1590007 cmp r9, r7
c022ac0c: 13570000 cmpne r7, #0
c022ac10: 13a07001 movne r7, #1
c022ac14: 03a07000 moveq r7, #0
c022ac18: 1affffe6 bne c022abb8 <__udp4_lib_mcast_deliver.constprop.6+0x148>
sk_nulls_for_each_from(s, node) {
c022ac1c: e2445020 sub r5, r4, #32
if (!ip_mc_sf_allow(s, loc_addr, rmt_addr, dif))
c022ac20: e1a00005 mov r0, r5
c022ac24: e1a0100a mov r1, sl
c022ac28: e1a02008 mov r2, r8
c022ac2c: e1a03009 mov r3, r9
c022ac30: ebfffffe bl 0 <ip_mc_sf_allow>
c022ac30: R_ARM_CALL ip_mc_sf_allow
c022ac34: e3500000 cmp r0, #0
c022ac38: 0affffde beq c022abb8 <__udp4_lib_mcast_deliver.constprop.6+0x148>
while (sk) {
c022ac3c: e3550000 cmp r5, #0
flush_stack(stack, count, skb, ~0);
c022ac40: 11a0b005 movne fp, r5
while (sk) {
c022ac44: 0affffa3 beq c022aad8 <__udp4_lib_mcast_deliver.constprop.6+0x68>
stack[count++] = sk;
c022ac48: e28d3e11 add r3, sp, #272 ; 0x110
c022ac4c: e0833107 add r3, r3, r7, lsl #2
c022ac50: e503b100 str fp, [r3, #-256] ; 0xffffff00
return (!is_a_nulls(sk->sk_nulls_node.next)) ?
c022ac54: e59b4020 ldr r4, [fp, #32]
struct sock, sk_nulls_node) :
c022ac58: e3140001 tst r4, #1
c022ac5c: 1a000032 bne c022ad2c <__udp4_lib_mcast_deliver.constprop.6+0x2bc>
sk = udp_v4_mcast_next(net, sk_nulls_next(sk), uh->dest,
c022ac60: e59d2000 ldr r2, [sp]
sk_nulls_for_each_from(s, node) {
c022ac64: e3540020 cmp r4, #32
sk = udp_v4_mcast_next(net, sk_nulls_next(sk), uh->dest,
c022ac68: e1d260b2 ldrh r6, [r2, #2]
stack[count++] = sk;
c022ac6c: e2877001 add r7, r7, #1
c022ac70: e1a03406 lsl r3, r6, #8
c022ac74: e1836426 orr r6, r3, r6, lsr #8
c022ac78: e1a06806 lsl r6, r6, #16
c022ac7c: e1a06826 lsr r6, r6, #16
sk = udp_v4_mcast_next(net, sk_nulls_next(sk), uh->dest,
c022ac80: e1d250b0 ldrh r5, [r2]
sk_nulls_for_each_from(s, node) {
c022ac84: 1a000003 bne c022ac98 <__udp4_lib_mcast_deliver.constprop.6+0x228>
c022ac88: ea000028 b c022ad30 <__udp4_lib_mcast_deliver.constprop.6+0x2c0>
c022ac8c: e5944000 ldr r4, [r4]
c022ac90: e3140001 tst r4, #1
c022ac94: 1a000025 bne c022ad30 <__udp4_lib_mcast_deliver.constprop.6+0x2c0>
if (!net_eq(sock_net(s), net) ||
c022ac98: e15401b8 ldrh r0, [r4, #-24] ; 0xffffffe8
c022ac9c: e1500006 cmp r0, r6
c022aca0: 1afffff9 bne c022ac8c <__udp4_lib_mcast_deliver.constprop.6+0x21c>
(inet->inet_daddr && inet->inet_daddr != rmt_addr) ||
c022aca4: e5140020 ldr r0, [r4, #-32] ; 0xffffffe0
c022aca8: e1580000 cmp r8, r0
c022acac: 13500000 cmpne r0, #0
c022acb0: 1afffff5 bne c022ac8c <__udp4_lib_mcast_deliver.constprop.6+0x21c>
(inet->inet_dport != rmt_port && inet->inet_dport) ||
c022acb4: e2843f4e add r3, r4, #312 ; 0x138
c022acb8: e1d330b0 ldrh r3, [r3]
c022acbc: e1550003 cmp r5, r3
c022acc0: 13530000 cmpne r3, #0
c022acc4: 1afffff0 bne c022ac8c <__udp4_lib_mcast_deliver.constprop.6+0x21c>
(inet->inet_rcv_saddr &&
c022acc8: e514301c ldr r3, [r4, #-28] ; 0xffffffe4
c022accc: e15a0003 cmp sl, r3
c022acd0: 13530000 cmpne r3, #0
c022acd4: 1affffec bne c022ac8c <__udp4_lib_mcast_deliver.constprop.6+0x21c>
(s->sk_bound_dev_if && s->sk_bound_dev_if != dif))
c022acd8: e5143010 ldr r3, [r4, #-16]
c022acdc: e1590003 cmp r9, r3
c022ace0: 13530000 cmpne r3, #0
c022ace4: 13a03001 movne r3, #1
c022ace8: 03a03000 moveq r3, #0
c022acec: e58d3004 str r3, [sp, #4]
c022acf0: 1affffe5 bne c022ac8c <__udp4_lib_mcast_deliver.constprop.6+0x21c>
sk_nulls_for_each_from(s, node) {
c022acf4: e244b020 sub fp, r4, #32
if (!ip_mc_sf_allow(s, loc_addr, rmt_addr, dif))
c022acf8: e1a0000b mov r0, fp
c022acfc: e1a0100a mov r1, sl
c022ad00: e1a02008 mov r2, r8
c022ad04: e1a03009 mov r3, r9
c022ad08: ebfffffe bl 0 <ip_mc_sf_allow>
c022ad08: R_ARM_CALL ip_mc_sf_allow
c022ad0c: e3500000 cmp r0, #0
c022ad10: 0affffdd beq c022ac8c <__udp4_lib_mcast_deliver.constprop.6+0x21c>
if (unlikely(count == ARRAY_SIZE(stack))) {
c022ad14: e3570040 cmp r7, #64 ; 0x40
c022ad18: 0a000017 beq c022ad7c <__udp4_lib_mcast_deliver.constprop.6+0x30c>
while (sk) {
c022ad1c: e35b0000 cmp fp, #0
c022ad20: 1affffc8 bne c022ac48 <__udp4_lib_mcast_deliver.constprop.6+0x1d8>
c022ad24: e1a05007 mov r5, r7
c022ad28: ea000003 b c022ad3c <__udp4_lib_mcast_deliver.constprop.6+0x2cc>
stack[count++] = sk;
c022ad2c: e2877001 add r7, r7, #1
if (unlikely(count == ARRAY_SIZE(stack))) {
c022ad30: e3570040 cmp r7, #64 ; 0x40
while (sk) {
c022ad34: e1a05007 mov r5, r7
if (unlikely(count == ARRAY_SIZE(stack))) {
c022ad38: 0a000018 beq c022ada0 <__udp4_lib_mcast_deliver.constprop.6+0x330>
for (i = 0; i < count; i++)
c022ad3c: e3570000 cmp r7, #0
c022ad40: 0affff64 beq c022aad8 <__udp4_lib_mcast_deliver.constprop.6+0x68>
while (sk) {
c022ad44: e3a02000 mov r2, #0
c022ad48: e28d100c add r1, sp, #12
sock_hold(stack[i]);
c022ad4c: e5b10004 ldr r0, [r1, #4]!
asm volatile(
c022ad50: e10fc000 mrs ip, CPSR
c022ad54: e38c3080 orr r3, ip, #128 ; 0x80
c022ad58: e121f003 msr CPSR_c, r3
val = v->counter;
c022ad5c: e590302c ldr r3, [r0, #44] ; 0x2c
v->counter = val += i;
c022ad60: e2833001 add r3, r3, #1
c022ad64: e580302c str r3, [r0, #44] ; 0x2c
asm volatile(
c022ad68: e121f00c msr CPSR_c, ip
for (i = 0; i < count; i++)
c022ad6c: e2822001 add r2, r2, #1
c022ad70: e1550002 cmp r5, r2
c022ad74: 8afffff4 bhi c022ad4c <__udp4_lib_mcast_deliver.constprop.6+0x2dc>
c022ad78: eaffff56 b c022aad8 <__udp4_lib_mcast_deliver.constprop.6+0x68>
if (!sk)
c022ad7c: e35b0000 cmp fp, #0
c022ad80: 0a000006 beq c022ada0 <__udp4_lib_mcast_deliver.constprop.6+0x330>
flush_stack(stack, count, skb, ~0);
c022ad84: e1a01007 mov r1, r7
c022ad88: e28d0010 add r0, sp, #16
c022ad8c: e59d2008 ldr r2, [sp, #8]
c022ad90: e3e03000 mvn r3, #0
count = 0;
c022ad94: e59d7004 ldr r7, [sp, #4]
flush_stack(stack, count, skb, ~0);
c022ad98: ebfffef2 bl c022a968 <flush_stack>
c022ad9c: eaffffa9 b c022ac48 <__udp4_lib_mcast_deliver.constprop.6+0x1d8>
while (sk) {
c022ada0: e3a05040 mov r5, #64 ; 0x40
c022ada4: eaffffe6 b c022ad44 <__udp4_lib_mcast_deliver.constprop.6+0x2d4>
c022ada8: ebfffffe bl 0 <preempt_schedule>
c022ada8: R_ARM_CALL preempt_schedule
c022adac: eaffff51 b c022aaf8 <__udp4_lib_mcast_deliver.constprop.6+0x88>
c022adb0 <__udp4_lib_rcv>:
{
c022adb0: e92d4ff0 push {r4, r5, r6, r7, r8, r9, sl, fp, lr}
return skb->len - skb->data_len;
c022adb4: e590c04c ldr ip, [r0, #76] ; 0x4c
c022adb8: e5903050 ldr r3, [r0, #80] ; 0x50
c022adbc: e1a08001 mov r8, r1
c022adc0: e063100c rsb r1, r3, ip
if (likely(len <= skb_headlen(skb)))
c022adc4: e3510007 cmp r1, #7
c022adc8: e24dd01c sub sp, sp, #28
c022adcc: e1a04000 mov r4, r0
c022add0: e1a05002 mov r5, r2
WARN_ON((skb->_skb_refdst & SKB_DST_NOREF) &&
c022add4: e5909048 ldr r9, [r0, #72] ; 0x48
if (likely(len <= skb_headlen(skb)))
c022add8: 9a000086 bls c022aff8 <__udp4_lib_rcv+0x248>
return skb->transport_header;
c022addc: e590607c ldr r6, [r0, #124] ; 0x7c
ulen = ntohs(uh->len);
c022ade0: e1d670b4 ldrh r7, [r6, #4]
c022ade4: e1a03407 lsl r3, r7, #8
c022ade8: e1837427 orr r7, r3, r7, lsr #8
return skb->network_header;
c022adec: e5943080 ldr r3, [r4, #128] ; 0x80
c022adf0: e1a07807 lsl r7, r7, #16
c022adf4: e1a07827 lsr r7, r7, #16
saddr = ip_hdr(skb)->saddr;
c022adf8: e593100c ldr r1, [r3, #12]
daddr = ip_hdr(skb)->daddr;
c022adfc: e5932010 ldr r2, [r3, #16]
if (ulen > skb->len)
c022ae00: e157000c cmp r7, ip
saddr = ip_hdr(skb)->saddr;
c022ae04: e58d1010 str r1, [sp, #16]
daddr = ip_hdr(skb)->daddr;
c022ae08: e58d2014 str r2, [sp, #20]
if (ulen > skb->len)
c022ae0c: 9a00000f bls c022ae50 <__udp4_lib_rcv+0xa0>
LIMIT_NETDEBUG(KERN_DEBUG "UDP%s: short packet: From %pI4:%u %d/%d to %pI4:%u\n",
c022ae10: e59f34f4 ldr r3, [pc, #1268] ; c022b30c <__udp4_lib_rcv+0x55c>
c022ae14: e5933000 ldr r3, [r3]
c022ae18: e3530000 cmp r3, #0
c022ae1c: 1a00007f bne c022b020 <__udp4_lib_rcv+0x270>
UDP_INC_STATS_BH(net, UDP_MIB_INERRORS, proto == IPPROTO_UDPLITE);
c022ae20: e3550088 cmp r5, #136 ; 0x88
c022ae24: 0a00004f beq c022af68 <__udp4_lib_rcv+0x1b8>
c022ae28: e59f34e0 ldr r3, [pc, #1248] ; c022b310 <__udp4_lib_rcv+0x560>
c022ae2c: e5932098 ldr r2, [r3, #152] ; 0x98
c022ae30: e592300c ldr r3, [r2, #12]
c022ae34: e2833001 add r3, r3, #1
c022ae38: e582300c str r3, [r2, #12]
kfree_skb(skb);
c022ae3c: e1a00004 mov r0, r4
c022ae40: ebfffffe bl 0 <kfree_skb>
c022ae40: R_ARM_CALL kfree_skb
return 0;
c022ae44: e3a00000 mov r0, #0
}
c022ae48: e28dd01c add sp, sp, #28
c022ae4c: e8bd8ff0 pop {r4, r5, r6, r7, r8, r9, sl, fp, pc}
if (proto == IPPROTO_UDP) {
c022ae50: e3550011 cmp r5, #17
c022ae54: 0a000049 beq c022af80 <__udp4_lib_rcv+0x1d0>
UDP_SKB_CB(skb)->partial_cov = 0;
c022ae58: e3a02000 mov r2, #0
if (proto == IPPROTO_UDPLITE) {
c022ae5c: e3550088 cmp r5, #136 ; 0x88
UDP_SKB_CB(skb)->cscov = skb->len;
c022ae60: e1c4c2bc strh ip, [r4, #44] ; 0x2c
UDP_SKB_CB(skb)->partial_cov = 0;
c022ae64: e5c4202e strb r2, [r4, #46] ; 0x2e
if (proto == IPPROTO_UDPLITE) {
c022ae68: 0a000089 beq c022b094 <__udp4_lib_rcv+0x2e4>
c022ae6c: e1a0e003 mov lr, r3
c022ae70: e1d620b6 ldrh r2, [r6, #6]
if (uh->check == 0) {
c022ae74: e3520000 cmp r2, #0
c022ae78: 0a000080 beq c022b080 <__udp4_lib_rcv+0x2d0>
} else if (skb->ip_summed == CHECKSUM_COMPLETE) {
c022ae7c: e5d43060 ldrb r3, [r4, #96] ; 0x60
c022ae80: e203200c and r2, r3, #12
c022ae84: e3520008 cmp r2, #8
c022ae88: 0a00006c beq c022b040 <__udp4_lib_rcv+0x290>
return skb->ip_summed & CHECKSUM_UNNECESSARY;
c022ae8c: e1a03123 lsr r3, r3, #2
if (!skb_csum_unnecessary(skb))
c022ae90: e2133001 ands r3, r3, #1
c022ae94: 1a00000b bne c022aec8 <__udp4_lib_rcv+0x118>
c022ae98: e1a01805 lsl r1, r5, #16
c022ae9c: e1a02421 lsr r2, r1, #8
__asm__(
c022aea0: e59e0010 ldr r0, [lr, #16]
c022aea4: e59ec00c ldr ip, [lr, #12]
c022aea8: e1822c21 orr r2, r2, r1, lsr #24
skb->csum = csum_tcpudp_nofold(iph->saddr, iph->daddr,
c022aeac: e594a04c ldr sl, [r4, #76] ; 0x4c
c022aeb0: e0931000 adds r1, r3, r0
c022aeb4: e0b1100c adcs r1, r1, ip
c022aeb8: e0b1140a adcs r1, r1, sl, lsl #8
c022aebc: e0b11002 adcs r1, r1, r2
c022aec0: e2a11000 adc r1, r1, #0
c022aec4: e5841058 str r1, [r4, #88] ; 0x58
return (struct dst_entry *)(skb->_skb_refdst & SKB_DST_PTRMASK);
c022aec8: e3c99001 bic r9, r9, #1
if (rt->rt_flags & (RTCF_BROADCAST|RTCF_MULTICAST))
c022aecc: e1d935be ldrh r3, [r9, #94] ; 0x5e
c022aed0: e1a03803 lsl r3, r3, #16
c022aed4: e2133203 ands r3, r3, #805306368 ; 0x30000000
c022aed8: 1a0000c3 bne c022b1ec <__udp4_lib_rcv+0x43c>
sock_net_set(sk, hold_net(net));
}
static inline struct sock *skb_steal_sock(struct sk_buff *skb)
{
if (unlikely(skb->sk)) {
c022aedc: e5949010 ldr r9, [r4, #16]
sk = __udp4_lib_lookup_skb(skb, uh->source, uh->dest, udptable);
c022aee0: e1d620b0 ldrh r2, [r6]
c022aee4: e3590000 cmp r9, #0
c022aee8: e1d6c0b2 ldrh ip, [r6, #2]
c022aeec: 1a0000d2 bne c022b23c <__udp4_lib_rcv+0x48c>
c022aef0: e5940048 ldr r0, [r4, #72] ; 0x48
return __udp4_lib_lookup(dev_net(skb_dst(skb)->dev), iph->saddr, sport,
c022aef4: e59e100c ldr r1, [lr, #12]
c022aef8: e59e3010 ldr r3, [lr, #16]
c022aefc: e3c00001 bic r0, r0, #1
c022af00: e58dc000 str ip, [sp]
return rt->peer;
}
static inline int inet_iif(const struct sk_buff *skb)
{
return skb_rtable(skb)->rt_iif;
c022af04: e1d0c7b0 ldrh ip, [r0, #112] ; 0x70
c022af08: e1d007b2 ldrh r0, [r0, #114] ; 0x72
c022af0c: e18c0800 orr r0, ip, r0, lsl #16
c022af10: e98d0101 stmib sp, {r0, r8}
c022af14: e59f03f4 ldr r0, [pc, #1012] ; c022b310 <__udp4_lib_rcv+0x560>
c022af18: ebfffffe bl c0229f64 <__udp4_lib_lookup>
c022af18: R_ARM_CALL __udp4_lib_lookup
if (sk != NULL) {
c022af1c: e2509000 subs r9, r0, #0
c022af20: 0a00009b beq c022b194 <__udp4_lib_rcv+0x3e4>
int ret = udp_queue_rcv_skb(sk, skb);
c022af24: e1a01004 mov r1, r4
c022af28: e1a00009 mov r0, r9
c022af2c: ebfffffe bl c022a6b4 <udp_queue_rcv_skb>
c022af2c: R_ARM_CALL udp_queue_rcv_skb
c022af30: e1a04000 mov r4, r0
asm volatile(
c022af34: e10f2000 mrs r2, CPSR
c022af38: e3823080 orr r3, r2, #128 ; 0x80
c022af3c: e121f003 msr CPSR_c, r3
val = v->counter;
c022af40: e599302c ldr r3, [r9, #44] ; 0x2c
v->counter = val -= i;
c022af44: e2433001 sub r3, r3, #1
c022af48: e589302c str r3, [r9, #44] ; 0x2c
asm volatile(
c022af4c: e121f002 msr CPSR_c, r2
if (atomic_dec_and_test(&sk->sk_refcnt))
c022af50: e3530000 cmp r3, #0
c022af54: 0a0000a1 beq c022b1e0 <__udp4_lib_rcv+0x430>
if (ret > 0)
c022af58: e3540000 cmp r4, #0
return -ret;
c022af5c: c2640000 rsbgt r0, r4, #0
return 0;
c022af60: d3a00000 movle r0, #0
c022af64: eaffffb7 b c022ae48 <__udp4_lib_rcv+0x98>
UDP_INC_STATS_BH(net, UDP_MIB_INERRORS, proto == IPPROTO_UDPLITE);
c022af68: e59f33a0 ldr r3, [pc, #928] ; c022b310 <__udp4_lib_rcv+0x560>
c022af6c: e593209c ldr r2, [r3, #156] ; 0x9c
c022af70: e592300c ldr r3, [r2, #12]
c022af74: e2833001 add r3, r3, #1
c022af78: e582300c str r3, [r2, #12]
c022af7c: eaffffae b c022ae3c <__udp4_lib_rcv+0x8c>
if (ulen < sizeof(*uh) || pskb_trim_rcsum(skb, ulen))
c022af80: e3570007 cmp r7, #7
c022af84: 8a000064 bhi c022b11c <__udp4_lib_rcv+0x36c>
LIMIT_NETDEBUG(KERN_DEBUG "UDP%s: short packet: From %pI4:%u %d/%d to %pI4:%u\n",
c022af88: e59f337c ldr r3, [pc, #892] ; c022b30c <__udp4_lib_rcv+0x55c>
c022af8c: e5933000 ldr r3, [r3]
c022af90: e3530000 cmp r3, #0
c022af94: 0affffa3 beq c022ae28 <__udp4_lib_rcv+0x78>
c022af98: ebfffffe bl 0 <net_ratelimit>
c022af98: R_ARM_CALL net_ratelimit
c022af9c: e3500000 cmp r0, #0
c022afa0: 0affffa0 beq c022ae28 <__udp4_lib_rcv+0x78>
c022afa4: e1d6c0b0 ldrh ip, [r6]
c022afa8: e59f1364 ldr r1, [pc, #868] ; c022b314 <__udp4_lib_rcv+0x564>
c022afac: e1d620b2 ldrh r2, [r6, #2]
c022afb0: e1a0040c lsl r0, ip, #8
c022afb4: e1a03422 lsr r3, r2, #8
c022afb8: e1832402 orr r2, r3, r2, lsl #8
c022afbc: e1a02802 lsl r2, r2, #16
c022afc0: e180342c orr r3, r0, ip, lsr #8
c022afc4: e594c04c ldr ip, [r4, #76] ; 0x4c
c022afc8: e28d0014 add r0, sp, #20
c022afcc: e1a02822 lsr r2, r2, #16
c022afd0: e1a03803 lsl r3, r3, #16
c022afd4: e58d200c str r2, [sp, #12]
c022afd8: e58d0008 str r0, [sp, #8]
c022afdc: e58d7000 str r7, [sp]
c022afe0: e1a03823 lsr r3, r3, #16
c022afe4: e58dc004 str ip, [sp, #4]
c022afe8: e28d2010 add r2, sp, #16
c022afec: e59f0324 ldr r0, [pc, #804] ; c022b318 <__udp4_lib_rcv+0x568>
c022aff0: ebfffffe bl 0 <printk>
c022aff0: R_ARM_CALL printk
c022aff4: eaffff89 b c022ae20 <__udp4_lib_rcv+0x70>
if (unlikely(len > skb->len))
c022aff8: e35c0007 cmp ip, #7
c022affc: 9affff87 bls c022ae20 <__udp4_lib_rcv+0x70>
return __pskb_pull_tail(skb, len - skb_headlen(skb)) != NULL;
c022b000: e2611008 rsb r1, r1, #8
c022b004: ebfffffe bl 0 <__pskb_pull_tail>
c022b004: R_ARM_CALL __pskb_pull_tail
if (!pskb_may_pull(skb, sizeof(struct udphdr)))
c022b008: e3500000 cmp r0, #0
c022b00c: 0affff83 beq c022ae20 <__udp4_lib_rcv+0x70>
return skb->transport_header;
c022b010: e594607c ldr r6, [r4, #124] ; 0x7c
c022b014: e594c04c ldr ip, [r4, #76] ; 0x4c
ulen = ntohs(uh->len);
c022b018: e1d670b4 ldrh r7, [r6, #4]
c022b01c: eaffff70 b c022ade4 <__udp4_lib_rcv+0x34>
LIMIT_NETDEBUG(KERN_DEBUG "UDP%s: short packet: From %pI4:%u %d/%d to %pI4:%u\n",
c022b020: ebfffffe bl 0 <net_ratelimit>
c022b020: R_ARM_CALL net_ratelimit
c022b024: e3500000 cmp r0, #0
c022b028: 0affff7c beq c022ae20 <__udp4_lib_rcv+0x70>
c022b02c: e3550088 cmp r5, #136 ; 0x88
c022b030: 1affffdb bne c022afa4 <__udp4_lib_rcv+0x1f4>
c022b034: e1d6c0b0 ldrh ip, [r6]
c022b038: e59f12dc ldr r1, [pc, #732] ; c022b31c <__udp4_lib_rcv+0x56c>
c022b03c: eaffffda b c022afac <__udp4_lib_rcv+0x1fc>
c022b040: e1a01805 lsl r1, r5, #16
c022b044: e1a02421 lsr r2, r1, #8
c022b048: e1821c21 orr r1, r2, r1, lsr #24
c022b04c: e5940058 ldr r0, [r4, #88] ; 0x58
c022b050: e59ec010 ldr ip, [lr, #16]
c022b054: e59ea00c ldr sl, [lr, #12]
if (!csum_tcpudp_magic(iph->saddr, iph->daddr, skb->len,
c022b058: e594b04c ldr fp, [r4, #76] ; 0x4c
c022b05c: e090200c adds r2, r0, ip
c022b060: e0b2200a adcs r2, r2, sl
c022b064: e0b2240b adcs r2, r2, fp, lsl #8
c022b068: e0b22001 adcs r2, r2, r1
c022b06c: e2a22000 adc r2, r2, #0
__asm__(
c022b070: e0822862 add r2, r2, r2, ror #16
return (__force __sum16)(~(__force u32)sum >> 16);
c022b074: e1e02002 mvn r2, r2
c022b078: e1b02822 lsrs r2, r2, #16
c022b07c: 1affff82 bne c022ae8c <__udp4_lib_rcv+0xdc>
skb->ip_summed = CHECKSUM_UNNECESSARY;
c022b080: e5d43060 ldrb r3, [r4, #96] ; 0x60
c022b084: e3c33008 bic r3, r3, #8
c022b088: e3833004 orr r3, r3, #4
c022b08c: e5c43060 strb r3, [r4, #96] ; 0x60
c022b090: eaffff8c b c022aec8 <__udp4_lib_rcv+0x118>
if (uh->check == 0) {
c022b094: e1d620b6 ldrh r2, [r6, #6]
c022b098: e3520000 cmp r2, #0
c022b09c: 1a000026 bne c022b13c <__udp4_lib_rcv+0x38c>
LIMIT_NETDEBUG(KERN_DEBUG "UDPLite: zeroed checksum field\n");
c022b0a0: e59f8264 ldr r8, [pc, #612] ; c022b30c <__udp4_lib_rcv+0x55c>
c022b0a4: e5983000 ldr r3, [r8]
c022b0a8: e3530000 cmp r3, #0
c022b0ac: 0affffad beq c022af68 <__udp4_lib_rcv+0x1b8>
c022b0b0: ebfffffe bl 0 <net_ratelimit>
c022b0b0: R_ARM_CALL net_ratelimit
c022b0b4: e3500000 cmp r0, #0
c022b0b8: 1a000090 bne c022b300 <__udp4_lib_rcv+0x550>
c022b0bc: e5983000 ldr r3, [r8]
LIMIT_NETDEBUG(KERN_DEBUG "UDP%s: bad checksum. From %pI4:%u to %pI4:%u ulen %d\n",
c022b0c0: e3530000 cmp r3, #0
c022b0c4: 0affffa7 beq c022af68 <__udp4_lib_rcv+0x1b8>
c022b0c8: ebfffffe bl 0 <net_ratelimit>
c022b0c8: R_ARM_CALL net_ratelimit
c022b0cc: e3500000 cmp r0, #0
c022b0d0: 0affffa4 beq c022af68 <__udp4_lib_rcv+0x1b8>
c022b0d4: e1d6c0b0 ldrh ip, [r6]
c022b0d8: e59f123c ldr r1, [pc, #572] ; c022b31c <__udp4_lib_rcv+0x56c>
c022b0dc: e1d620b2 ldrh r2, [r6, #2]
c022b0e0: e1a0040c lsl r0, ip, #8
c022b0e4: e1a03422 lsr r3, r2, #8
c022b0e8: e1832402 orr r2, r3, r2, lsl #8
c022b0ec: e1a02802 lsl r2, r2, #16
c022b0f0: e180342c orr r3, r0, ip, lsr #8
c022b0f4: e1a02822 lsr r2, r2, #16
c022b0f8: e28d0014 add r0, sp, #20
c022b0fc: e1a03803 lsl r3, r3, #16
c022b100: e98d0084 stmib sp, {r2, r7}
c022b104: e58d0000 str r0, [sp]
c022b108: e1a03823 lsr r3, r3, #16
c022b10c: e28d2010 add r2, sp, #16
c022b110: e59f0208 ldr r0, [pc, #520] ; c022b320 <__udp4_lib_rcv+0x570>
c022b114: ebfffffe bl 0 <printk>
c022b114: R_ARM_CALL printk
c022b118: eaffff40 b c022ae20 <__udp4_lib_rcv+0x70>
if (likely(len >= skb->len))
c022b11c: e157000c cmp r7, ip
c022b120: 3a000059 bcc c022b28c <__udp4_lib_rcv+0x4dc>
{
c022b124: e1a0e003 mov lr, r3
UDP_SKB_CB(skb)->partial_cov = 0;
c022b128: e3a03000 mov r3, #0
UDP_SKB_CB(skb)->cscov = skb->len;
c022b12c: e1c4c2bc strh ip, [r4, #44] ; 0x2c
UDP_SKB_CB(skb)->partial_cov = 0;
c022b130: e5c4302e strb r3, [r4, #46] ; 0x2e
c022b134: e1d620b6 ldrh r2, [r6, #6]
c022b138: eaffff4d b c022ae74 <__udp4_lib_rcv+0xc4>
cscov = ntohs(uh->len);
c022b13c: e1d600b4 ldrh r0, [r6, #4]
c022b140: e1a01420 lsr r1, r0, #8
c022b144: e1811400 orr r1, r1, r0, lsl #8
c022b148: e1a01801 lsl r1, r1, #16
if (cscov == 0) /* Indicates that full coverage is required. */
c022b14c: e1b0a821 lsrs sl, r1, #16
c022b150: 0a00000d beq c022b18c <__udp4_lib_rcv+0x3dc>
else if (cscov < 8 || cscov > skb->len) {
c022b154: e35a0007 cmp sl, #7
c022b158: 9a00002a bls c022b208 <__udp4_lib_rcv+0x458>
c022b15c: e15a000c cmp sl, ip
c022b160: 8a000028 bhi c022b208 <__udp4_lib_rcv+0x458>
} else if (cscov < skb->len) {
c022b164: 2a000008 bcs c022b18c <__udp4_lib_rcv+0x3dc>
UDP_SKB_CB(skb)->partial_cov = 1;
c022b168: e3a01001 mov r1, #1
if (skb->ip_summed == CHECKSUM_COMPLETE)
c022b16c: e5d42060 ldrb r2, [r4, #96] ; 0x60
UDP_SKB_CB(skb)->cscov = cscov;
c022b170: e1c4a2bc strh sl, [r4, #44] ; 0x2c
if (skb->ip_summed == CHECKSUM_COMPLETE)
c022b174: e202000c and r0, r2, #12
c022b178: e3500008 cmp r0, #8
skb->ip_summed = CHECKSUM_NONE;
c022b17c: 03c2200c biceq r2, r2, #12
UDP_SKB_CB(skb)->partial_cov = 1;
c022b180: e5c4102e strb r1, [r4, #46] ; 0x2e
skb->ip_summed = CHECKSUM_NONE;
c022b184: 05c42060 strbeq r2, [r4, #96] ; 0x60
c022b188: e1d620b6 ldrh r2, [r6, #6]
{
c022b18c: e1a0e003 mov lr, r3
c022b190: eaffff37 b c022ae74 <__udp4_lib_rcv+0xc4>
return skb->ip_summed & CHECKSUM_UNNECESSARY;
c022b194: e5d43060 ldrb r3, [r4, #96] ; 0x60
return !skb_csum_unnecessary(skb) &&
c022b198: e3130004 tst r3, #4
c022b19c: 0a000029 beq c022b248 <__udp4_lib_rcv+0x498>
UDP_INC_STATS_BH(net, UDP_MIB_NOPORTS, proto == IPPROTO_UDPLITE);
c022b1a0: e3550088 cmp r5, #136 ; 0x88
c022b1a4: 0a000046 beq c022b2c4 <__udp4_lib_rcv+0x514>
c022b1a8: e59f3160 ldr r3, [pc, #352] ; c022b310 <__udp4_lib_rcv+0x560>
c022b1ac: e5932098 ldr r2, [r3, #152] ; 0x98
c022b1b0: e5923008 ldr r3, [r2, #8]
c022b1b4: e2833001 add r3, r3, #1
c022b1b8: e5823008 str r3, [r2, #8]
icmp_send(skb, ICMP_DEST_UNREACH, ICMP_PORT_UNREACH, 0);
c022b1bc: e3a01003 mov r1, #3
c022b1c0: e1a00004 mov r0, r4
c022b1c4: e1a02001 mov r2, r1
c022b1c8: e3a03000 mov r3, #0
c022b1cc: ebfffffe bl 0 <icmp_send>
c022b1cc: R_ARM_CALL icmp_send
kfree_skb(skb);
c022b1d0: e1a00004 mov r0, r4
c022b1d4: ebfffffe bl 0 <kfree_skb>
c022b1d4: R_ARM_CALL kfree_skb
return 0;
c022b1d8: e3a00000 mov r0, #0
c022b1dc: eaffff19 b c022ae48 <__udp4_lib_rcv+0x98>
sk_free(sk);
c022b1e0: e1a00009 mov r0, r9
c022b1e4: ebfffffe bl 0 <sk_free>
c022b1e4: R_ARM_CALL sk_free
c022b1e8: eaffff5a b c022af58 <__udp4_lib_rcv+0x1a8>
return __udp4_lib_mcast_deliver(net, skb, uh,
c022b1ec: e59d2010 ldr r2, [sp, #16]
c022b1f0: e59d3014 ldr r3, [sp, #20]
c022b1f4: e58d8000 str r8, [sp]
c022b1f8: e1a00004 mov r0, r4
c022b1fc: e1a01006 mov r1, r6
c022b200: ebfffe1a bl c022aa70 <__udp4_lib_mcast_deliver.constprop.6>
c022b204: eaffff0f b c022ae48 <__udp4_lib_rcv+0x98>
LIMIT_NETDEBUG(KERN_DEBUG "UDPLite: bad csum coverage %d/%d\n",
c022b208: e59f80fc ldr r8, [pc, #252] ; c022b30c <__udp4_lib_rcv+0x55c>
c022b20c: e5983000 ldr r3, [r8]
c022b210: e3530000 cmp r3, #0
c022b214: 0affff53 beq c022af68 <__udp4_lib_rcv+0x1b8>
c022b218: ebfffffe bl 0 <net_ratelimit>
c022b218: R_ARM_CALL net_ratelimit
c022b21c: e3500000 cmp r0, #0
c022b220: 0affffa5 beq c022b0bc <__udp4_lib_rcv+0x30c>
c022b224: e1a0100a mov r1, sl
c022b228: e59f00f4 ldr r0, [pc, #244] ; c022b324 <__udp4_lib_rcv+0x574>
c022b22c: e594204c ldr r2, [r4, #76] ; 0x4c
c022b230: ebfffffe bl 0 <printk>
c022b230: R_ARM_CALL printk
c022b234: e5983000 ldr r3, [r8]
c022b238: eaffffa0 b c022b0c0 <__udp4_lib_rcv+0x310>
struct sock *sk = skb->sk;
skb->destructor = NULL;
c022b23c: e5843064 str r3, [r4, #100] ; 0x64
skb->sk = NULL;
c022b240: e5843010 str r3, [r4, #16]
c022b244: eaffff36 b c022af24 <__udp4_lib_rcv+0x174>
return __skb_checksum_complete_head(skb, UDP_SKB_CB(skb)->cscov);
c022b248: e1a00004 mov r0, r4
c022b24c: e1d412bc ldrh r1, [r4, #44] ; 0x2c
c022b250: ebfffffe bl 0 <__skb_checksum_complete_head>
c022b250: R_ARM_CALL __skb_checksum_complete_head
return !skb_csum_unnecessary(skb) &&
c022b254: e3500000 cmp r0, #0
c022b258: 0affffd0 beq c022b1a0 <__udp4_lib_rcv+0x3f0>
LIMIT_NETDEBUG(KERN_DEBUG "UDP%s: bad checksum. From %pI4:%u to %pI4:%u ulen %d\n",
c022b25c: e59f30a8 ldr r3, [pc, #168] ; c022b30c <__udp4_lib_rcv+0x55c>
c022b260: e5933000 ldr r3, [r3]
c022b264: e3530000 cmp r3, #0
c022b268: 0afffeec beq c022ae20 <__udp4_lib_rcv+0x70>
c022b26c: ebfffffe bl 0 <net_ratelimit>
c022b26c: R_ARM_CALL net_ratelimit
c022b270: e3500000 cmp r0, #0
c022b274: 0afffee9 beq c022ae20 <__udp4_lib_rcv+0x70>
c022b278: e3550088 cmp r5, #136 ; 0x88
c022b27c: 11d6c0b0 ldrhne ip, [r6]
c022b280: 159f108c ldrne r1, [pc, #140] ; c022b314 <__udp4_lib_rcv+0x564>
c022b284: 1affff94 bne c022b0dc <__udp4_lib_rcv+0x32c>
c022b288: eaffff91 b c022b0d4 <__udp4_lib_rcv+0x324>
if (skb->ip_summed == CHECKSUM_COMPLETE)
c022b28c: e5d42060 ldrb r2, [r4, #96] ; 0x60
c022b290: e202100c and r1, r2, #12
c022b294: e3510008 cmp r1, #8
skb->ip_summed = CHECKSUM_NONE;
c022b298: 03c2200c biceq r2, r2, #12
c022b29c: 05c42060 strbeq r2, [r4, #96] ; 0x60
if (skb->data_len)
c022b2a0: e5942050 ldr r2, [r4, #80] ; 0x50
c022b2a4: e3520000 cmp r2, #0
c022b2a8: 1a00000b bne c022b2dc <__udp4_lib_rcv+0x52c>
skb->tail = skb->data + offset;
c022b2ac: e5942094 ldr r2, [r4, #148] ; 0x94
skb->len = len;
c022b2b0: e584704c str r7, [r4, #76] ; 0x4c
skb->tail = skb->data + offset;
c022b2b4: e0822007 add r2, r2, r7
c022b2b8: e5842088 str r2, [r4, #136] ; 0x88
c022b2bc: e1a0c007 mov ip, r7
c022b2c0: eaffff97 b c022b124 <__udp4_lib_rcv+0x374>
UDP_INC_STATS_BH(net, UDP_MIB_NOPORTS, proto == IPPROTO_UDPLITE);
c022b2c4: e59f3044 ldr r3, [pc, #68] ; c022b310 <__udp4_lib_rcv+0x560>
c022b2c8: e593209c ldr r2, [r3, #156] ; 0x9c
c022b2cc: e5923008 ldr r3, [r2, #8]
c022b2d0: e2833001 add r3, r3, #1
c022b2d4: e5823008 str r3, [r2, #8]
c022b2d8: eaffffb7 b c022b1bc <__udp4_lib_rcv+0x40c>
return ___pskb_trim(skb, len);
c022b2dc: e1a00004 mov r0, r4
c022b2e0: e1a01007 mov r1, r7
c022b2e4: ebfffffe bl 0 <___pskb_trim>
c022b2e4: R_ARM_CALL ___pskb_trim
if (ulen < sizeof(*uh) || pskb_trim_rcsum(skb, ulen))
c022b2e8: e3500000 cmp r0, #0
c022b2ec: 1affff25 bne c022af88 <__udp4_lib_rcv+0x1d8>
c022b2f0: e594c04c ldr ip, [r4, #76] ; 0x4c
c022b2f4: e594e080 ldr lr, [r4, #128] ; 0x80
c022b2f8: e594607c ldr r6, [r4, #124] ; 0x7c
c022b2fc: eaffff89 b c022b128 <__udp4_lib_rcv+0x378>
LIMIT_NETDEBUG(KERN_DEBUG "UDPLite: zeroed checksum field\n");
c022b300: e59f0020 ldr r0, [pc, #32] ; c022b328 <__udp4_lib_rcv+0x578>
c022b304: ebfffffe bl 0 <printk>
c022b304: R_ARM_CALL printk
c022b308: eaffff6b b c022b0bc <__udp4_lib_rcv+0x30c>
...
c022b30c: R_ARM_ABS32 net_msg_warn
c022b310: R_ARM_ABS32 init_net
c022b314: 00000100 .word 0x00000100
c022b314: R_ARM_ABS32 .rodata.str1.4
c022b318: 000001e8 .word 0x000001e8
c022b318: R_ARM_ABS32 .rodata.str1.4
c022b31c: 00000194 .word 0x00000194
c022b31c: R_ARM_ABS32 .rodata.str1.4
c022b320: 00000220 .word 0x00000220
c022b320: R_ARM_ABS32 .rodata.str1.4
c022b324: 000001c0 .word 0x000001c0
c022b324: R_ARM_ABS32 .rodata.str1.4
c022b328: 0000019c .word 0x0000019c
c022b328: R_ARM_ABS32 .rodata.str1.4
c022b32c <udp_rcv>:
return __udp4_lib_rcv(skb, &udp_table, IPPROTO_UDP);
c022b32c: e59f1004 ldr r1, [pc, #4] ; c022b338 <udp_rcv+0xc>
c022b330: e3a02011 mov r2, #17
c022b334: eafffffe b c022adb0 <__udp4_lib_rcv>
c022b334: R_ARM_JUMP24 __udp4_lib_rcv
c022b338: 00000000 .word 0x00000000
c022b338: R_ARM_ABS32 .data..read_mostly
c022b33c <udp4_proc_exit>:
return register_pernet_subsys(&udp4_net_ops);
}
void udp4_proc_exit(void)
{
unregister_pernet_subsys(&udp4_net_ops);
c022b33c: e59f0000 ldr r0, [pc] ; c022b344 <udp4_proc_exit+0x8>
c022b340: eafffffe b 0 <unregister_pernet_subsys>
c022b340: R_ARM_JUMP24 unregister_pernet_subsys
c022b344: 00000020 .word 0x00000020
c022b344: R_ARM_ABS32 .data
c022b348 <udp4_ufo_send_check>:
sysctl_udp_rmem_min = SK_MEM_QUANTUM;
sysctl_udp_wmem_min = SK_MEM_QUANTUM;
}
int udp4_ufo_send_check(struct sk_buff *skb)
{
c022b348: e92d4070 push {r4, r5, r6, lr}
return skb->len - skb->data_len;
c022b34c: e590204c ldr r2, [r0, #76] ; 0x4c
c022b350: e5901050 ldr r1, [r0, #80] ; 0x50
c022b354: e1a04000 mov r4, r0
c022b358: e0611002 rsb r1, r1, r2
if (likely(len <= skb_headlen(skb)))
c022b35c: e3510007 cmp r1, #7
c022b360: 9a000017 bls c022b3c4 <udp4_ufo_send_check+0x7c>
__asm__(
c022b364: e3a01000 mov r1, #0
uh = udp_hdr(skb);
uh->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr, skb->len,
IPPROTO_UDP, 0);
skb->csum_start = skb_transport_header(skb) - skb->head;
skb->csum_offset = offsetof(struct udphdr, check);
c022b368: e3a0c006 mov ip, #6
return skb->network_header;
c022b36c: e5943080 ldr r3, [r4, #128] ; 0x80
return skb->transport_header;
c022b370: e594e07c ldr lr, [r4, #124] ; 0x7c
c022b374: e5935010 ldr r5, [r3, #16]
c022b378: e593600c ldr r6, [r3, #12]
c022b37c: e0913005 adds r3, r1, r5
c022b380: e0b33006 adcs r3, r3, r6
c022b384: e0b33402 adcs r3, r3, r2, lsl #8
c022b388: e2b33c11 adcs r3, r3, #4352 ; 0x1100
c022b38c: e2a33000 adc r3, r3, #0
__asm__(
c022b390: e0833863 add r3, r3, r3, ror #16
uh->check = ~csum_tcpudp_magic(iph->saddr, iph->daddr, skb->len,
c022b394: e1a03823 lsr r3, r3, #16
c022b398: e1ce30b6 strh r3, [lr, #6]
skb->ip_summed = CHECKSUM_PARTIAL;
c022b39c: e5d43060 ldrb r3, [r4, #96] ; 0x60
return 0;
c022b3a0: e1a00001 mov r0, r1
skb->csum_start = skb_transport_header(skb) - skb->head;
c022b3a4: e594207c ldr r2, [r4, #124] ; 0x7c
c022b3a8: e5941090 ldr r1, [r4, #144] ; 0x90
skb->ip_summed = CHECKSUM_PARTIAL;
c022b3ac: e383300c orr r3, r3, #12
skb->csum_start = skb_transport_header(skb) - skb->head;
c022b3b0: e0612002 rsb r2, r1, r2
c022b3b4: e1c425b8 strh r2, [r4, #88] ; 0x58
skb->ip_summed = CHECKSUM_PARTIAL;
c022b3b8: e5c43060 strb r3, [r4, #96] ; 0x60
skb->csum_offset = offsetof(struct udphdr, check);
c022b3bc: e1c4c5ba strh ip, [r4, #90] ; 0x5a
}
c022b3c0: e8bd8070 pop {r4, r5, r6, pc}
if (unlikely(len > skb->len))
c022b3c4: e3520007 cmp r2, #7
c022b3c8: 9a000004 bls c022b3e0 <udp4_ufo_send_check+0x98>
return __pskb_pull_tail(skb, len - skb_headlen(skb)) != NULL;
c022b3cc: e2611008 rsb r1, r1, #8
c022b3d0: ebfffffe bl 0 <__pskb_pull_tail>
c022b3d0: R_ARM_CALL __pskb_pull_tail
if (!pskb_may_pull(skb, sizeof(*uh)))
c022b3d4: e3500000 cmp r0, #0
c022b3d8: 1594204c ldrne r2, [r4, #76] ; 0x4c
c022b3dc: 1affffe0 bne c022b364 <udp4_ufo_send_check+0x1c>
return -EINVAL;
c022b3e0: e3e00015 mvn r0, #21
c022b3e4: e8bd8070 pop {r4, r5, r6, pc}
c022b3e8 <udp4_ufo_fragment>:
struct sk_buff *udp4_ufo_fragment(struct sk_buff *skb,
netdev_features_t features)
{
c022b3e8: e92d47f0 push {r4, r5, r6, r7, r8, r9, sl, lr}
return skb->end;
c022b3ec: e590508c ldr r5, [r0, #140] ; 0x8c
unsigned int mss;
int offset;
__wsum csum;
mss = skb_shinfo(skb)->gso_size;
if (unlikely(skb->len <= mss))
c022b3f0: e590c04c ldr ip, [r0, #76] ; 0x4c
mss = skb_shinfo(skb)->gso_size;
c022b3f4: e1d510b2 ldrh r1, [r5, #2]
if (unlikely(skb->len <= mss))
c022b3f8: e151000c cmp r1, ip
c022b3fc: 2a000035 bcs c022b4d8 <udp4_ufo_fragment+0xf0>
c022b400: e1a04000 mov r4, r0
return (features & feature) == feature;
}
static inline bool skb_gso_ok(struct sk_buff *skb, netdev_features_t features)
{
return net_gso_ok(features, skb_shinfo(skb)->gso_type) &&
c022b404: e1d500b6 ldrh r0, [r5, #6]
c022b408: e1a06002 mov r6, r2
netdev_features_t feature = gso_type << NETIF_F_GSO_SHIFT;
c022b40c: e1a08800 lsl r8, r0, #16
c022b410: e1a09fc8 asr r9, r8, #31
c022b414: e1a07003 mov r7, r3
goto out;
if (skb_gso_ok(skb, features | NETIF_F_GSO_ROBUST)) {
c022b418: e3822701 orr r2, r2, #262144 ; 0x40000
return (features & feature) == feature;
c022b41c: e0033009 and r3, r3, r9
c022b420: e0022008 and r2, r2, r8
return net_gso_ok(features, skb_shinfo(skb)->gso_type) &&
c022b424: e1590003 cmp r9, r3
c022b428: 01580002 cmpeq r8, r2
c022b42c: 0a000018 beq c022b494 <udp4_ufo_fragment+0xac>
return skb->data - skb->head;
c022b430: e5945090 ldr r5, [r4, #144] ; 0x90
c022b434: e5943094 ldr r3, [r4, #148] ; 0x94
return skb->csum_start - skb_headroom(skb);
c022b438: e1d425b8 ldrh r2, [r4, #88] ; 0x58
return skb->data - skb->head;
c022b43c: e0653003 rsb r3, r5, r3
return skb->csum_start - skb_headroom(skb);
c022b440: e0635002 rsb r5, r3, r2
/* Do software UFO. Complete and fill in the UDP checksum as HW cannot
* do checksum of UDP packets sent as multiple IP fragments.
*/
offset = skb_checksum_start_offset(skb);
csum = skb_checksum(skb, offset, skb->len - offset, 0);
c022b444: e065200c rsb r2, r5, ip
c022b448: e1a01005 mov r1, r5
c022b44c: e1a00004 mov r0, r4
c022b450: e3a03000 mov r3, #0
c022b454: ebfffffe bl 0 <skb_checksum>
c022b454: R_ARM_CALL skb_checksum
c022b458: e0800860 add r0, r0, r0, ror #16
return (__force __sum16)(~(__force u32)sum >> 16);
c022b45c: e1e00000 mvn r0, r0
offset += skb->csum_offset;
*(__sum16 *)(skb->data + offset) = csum_fold(csum);
c022b460: e5943094 ldr r3, [r4, #148] ; 0x94
offset += skb->csum_offset;
c022b464: e1d425ba ldrh r2, [r4, #90] ; 0x5a
*(__sum16 *)(skb->data + offset) = csum_fold(csum);
c022b468: e0835005 add r5, r3, r5
c022b46c: e1a00820 lsr r0, r0, #16
c022b470: e18500b2 strh r0, [r5, r2]
skb->ip_summed = CHECKSUM_NONE;
c022b474: e5d41060 ldrb r1, [r4, #96] ; 0x60
/* Fragment the skb. IP headers of the fragments are updated in
* inet_gso_segment()
*/
segs = skb_segment(skb, features);
c022b478: e1a02006 mov r2, r6
skb->ip_summed = CHECKSUM_NONE;
c022b47c: e3c1100c bic r1, r1, #12
c022b480: e5c41060 strb r1, [r4, #96] ; 0x60
segs = skb_segment(skb, features);
c022b484: e1a03007 mov r3, r7
c022b488: e1a00004 mov r0, r4
out:
return segs;
}
c022b48c: e8bd47f0 pop {r4, r5, r6, r7, r8, r9, sl, lr}
segs = skb_segment(skb, features);
c022b490: eafffffe b 0 <skb_segment>
c022b490: R_ARM_JUMP24 skb_segment
c022b494: e5953008 ldr r3, [r5, #8]
c022b498: e3530000 cmp r3, #0
c022b49c: 0a000003 beq c022b4b0 <udp4_ufo_fragment+0xc8>
(!skb_has_frag_list(skb) || (features & NETIF_F_FRAGLIST));
c022b4a0: e3a03000 mov r3, #0
c022b4a4: e2062040 and r2, r6, #64 ; 0x40
c022b4a8: e1923003 orrs r3, r2, r3
c022b4ac: 0affffdf beq c022b430 <udp4_ufo_fragment+0x48>
if (unlikely(type & ~(SKB_GSO_UDP | SKB_GSO_DODGY) ||
c022b4b0: e3c00004 bic r0, r0, #4
c022b4b4: e3500002 cmp r0, #2
c022b4b8: 1a000006 bne c022b4d8 <udp4_ufo_fragment+0xf0>
c022b4bc: e24c0001 sub r0, ip, #1
skb_shinfo(skb)->gso_segs = DIV_ROUND_UP(skb->len, mss);
c022b4c0: e0800001 add r0, r0, r1
c022b4c4: ebfffffe bl 0 <__aeabi_uidiv>
c022b4c4: R_ARM_CALL __aeabi_uidiv
segs = NULL;
c022b4c8: e3a03000 mov r3, #0
skb_shinfo(skb)->gso_segs = DIV_ROUND_UP(skb->len, mss);
c022b4cc: e1c500b4 strh r0, [r5, #4]
}
c022b4d0: e1a00003 mov r0, r3
c022b4d4: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc}
struct sk_buff *segs = ERR_PTR(-EINVAL);
c022b4d8: e3e03015 mvn r3, #21
}
c022b4dc: e1a00003 mov r0, r3
c022b4e0: e8bd87f0 pop {r4, r5, r6, r7, r8, r9, sl, pc}
Disassembly of section .init.text:
c0227a30 <udp4_proc_init_net>:
kfree_skb(skb);
c0227a30: e59f1000 .word 0xe59f1000
{
c0227a34: eafffffe b c0228f5c <udp_proc_register>
c0227a34: R_ARM_JUMP24 udp_proc_register
kfree_skb(skb);
c0227a38: 00000000 .word 0x00000000
c0227a38: R_ARM_ABS32 .data
c0227a3c <set_uhash_entries>:
}
c0227a3c: e52de004 push {lr} ; (str lr, [sp, #-4]!)
c0227a40: e2503000 .word 0xe2503000
{
c0227a44: e24dd00c sub sp, sp, #12
sk_common_release(sk);
c0227a48: e58d0004 .word 0xe58d0004
{
c0227a4c: 01a00003 moveq r0, r3
return memcpy_fromiovecend(to, (struct iovec *) from, offset, len);
c0227a50: 0a00000a beq c0227a80 <set_uhash_entries+0x44>
c0227a54: e3a02000 mov r2, #0
c0227a58: e28d1004 add r1, sp, #4
(!inet1->inet_rcv_saddr || !inet2->inet_rcv_saddr ||
c0227a5c: ebfffffe bl 0 <simple_strtoul>
c0227a5c: R_ARM_CALL simple_strtoul
return (!ipv6_only_sock(sk2) &&
c0227a60: e2403001 sub r3, r0, #1
c0227a64: e35300fe cmp r3, #254 ; 0xfe
(!inet1->inet_rcv_saddr || !inet2->inet_rcv_saddr ||
c0227a68: e59f3018 ldr r3, [pc, #24] ; c0227a88 <set_uhash_entries+0x4c>
return (!ipv6_only_sock(sk2) &&
c0227a6c: 93a02c01 movls r2, #256 ; 0x100
c0227a70: 85830000 strhi r0, [r3]
c0227a74: 93a00001 movls r0, #1
c0227a78: 83a00001 movhi r0, #1
c0227a7c: 95832000 strls r2, [r3]
c0227a80: e28dd00c add sp, sp, #12
}
c0227a84: e49df004 pop {pc} ; (ldr pc, [sp], #4)
a += initval;
c0227a88: 00000000 .word 0x00000000
c0227a88: R_ARM_ABS32 .init.data
c0227a8c <udp4_proc_init>:
__jhash_final(a, b, c);
c0227a8c: e59f0000 ldr r0, [pc] ; c0227a94 <udp4_proc_init+0x8>
a += initval;
c0227a90: eafffffe b 0 <register_pernet_subsys>
c0227a90: R_ARM_JUMP24 register_pernet_subsys
__jhash_final(a, b, c);
c0227a94: 00000020 .word 0x00000020
c0227a94: R_ARM_ABS32 .data
c0227a98 <udp_table_init>:
c0227a98: e92d4030 push {r4, r5, lr}
c0227a9c: e3a02801 mov r2, #65536 ; 0x10000
c0227aa0: e1a05001 mov r5, r1
c0227aa4: e3a01000 mov r1, #0
c0227aa8: e24dd014 sub sp, sp, #20
c0227aac: e1a04000 mov r4, r0
c0227ab0: e280c00c add ip, r0, #12
c0227ab4: e59f3100 ldr r3, [pc, #256] ; c0227bbc <udp_table_init+0x124>
c0227ab8: e2800008 add r0, r0, #8
c0227abc: e58d0008 str r0, [sp, #8]
c0227ac0: e58d1000 str r1, [sp]
c0227ac4: e58dc004 str ip, [sp, #4]
}
c0227ac8: e58d200c str r2, [sp, #12]
c0227acc: e5932000 ldr r2, [r3]
c0227ad0: e1a00005 mov r0, r5
c0227ad4: e3a03015 mov r3, #21
c0227ad8: e3a01010 mov r1, #16
{
c0227adc: ebfffffe bl 0 <alloc_large_system_hash>
c0227adc: R_ARM_CALL alloc_large_system_hash
if (sk_hashed(sk)) {
c0227ae0: e5943008 ldr r3, [r4, #8]
{
c0227ae4: e5840000 str r0, [r4]
if (sk_hashed(sk)) {
c0227ae8: e35300fe cmp r3, #254 ; 0xfe
c0227aec: 8a00000f bhi c0227b30 <udp_table_init+0x98>
struct udp_table *udptable = sk->sk_prot->h.udp_table;
c0227af0: e59f30c8 ldr r3, [pc, #200] ; c0227bc0 <udp_table_init+0x128>
hslot2 = udp_hashslot2(udptable, udp_sk(sk)->udp_portaddr_hash);
c0227af4: e5930030 ldr r0, [r3, #48] ; 0x30
struct udp_table *udptable = sk->sk_prot->h.udp_table;
c0227af8: e3500000 cmp r0, #0
return &table->hash2[hash & table->mask];
c0227afc: 03a00010 moveq r0, #16
c0227b00: 0a000001 beq c0227b0c <udp_table_init+0x74>
c0227b04: e3a010d0 mov r1, #208 ; 0xd0
c0227b08: ebfffffe bl 0 <kmem_cache_alloc>
c0227b08: R_ARM_CALL kmem_cache_alloc
c0227b0c: e3500000 cmp r0, #0
c0227b10: e5840000 str r0, [r4]
if (hslot2 != nhslot2) {
c0227b14: 1a000001 bne c0227b20 <udp_table_init+0x88>
udp_sk(sk)->udp_portaddr_hash = newhash;
c0227b18: e1a00005 mov r0, r5
if (hslot2 != nhslot2) {
c0227b1c: ebfffffe bl 0 <panic>
c0227b1c: R_ARM_CALL panic
c0227b20: e3a02008 mov r2, #8
c0227b24: e3a030ff mov r3, #255 ; 0xff
raw_spin_lock_bh(&lock->rlock);
c0227b28: e584200c str r2, [r4, #12]
c0227b2c: e5843008 str r3, [r4, #8]
c0227b30: e3a03000 mov r3, #0
c0227b34: e1a00003 mov r0, r3
c0227b38: e5942008 ldr r2, [r4, #8]
raw_spin_lock(&lock->rlock);
c0227b3c: e5941000 ldr r1, [r4]
c0227b40: e2822001 add r2, r2, #1
c0227b44: e0812182 add r2, r1, r2, lsl #3
return !h->pprev;
c0227b48: e5842004 str r2, [r4, #4]
if (!hlist_nulls_unhashed(n)) {
c0227b4c: e5942008 ldr r2, [r4, #8]
c0227b50: e1520003 cmp r2, r3
struct hlist_nulls_node *next = n->next;
c0227b54: 3a000008 bcc c0227b7c <udp_table_init+0xe4>
if (!is_a_nulls(next))
c0227b58: e1a02083 lsl r2, r3, #1
*pprev = next;
c0227b5c: e5941000 ldr r1, [r4]
next->pprev = pprev;
c0227b60: e3822001 orr r2, r2, #1
n->pprev = NULL;
c0227b64: e7812183 str r2, [r1, r3, lsl #3]
c0227b68: e5942000 ldr r2, [r4]
hslot2->count--;
c0227b6c: e0822183 add r2, r2, r3, lsl #3
c0227b70: e5820004 str r0, [r2, #4]
c0227b74: e2833001 add r3, r3, #1
c0227b78: eafffff3 b c0227b4c <udp_table_init+0xb4>
raw_spin_unlock(&lock->rlock);
c0227b7c: e3a03000 mov r3, #0
c0227b80: e1a00003 mov r0, r3
c0227b84: e5942008 ldr r2, [r4, #8]
c0227b88: e1520003 cmp r2, r3
c0227b8c: 3a000008 bcc c0227bb4 <udp_table_init+0x11c>
c0227b90: e1a02083 lsl r2, r3, #1
c0227b94: e5941004 ldr r1, [r4, #4]
raw_spin_lock(&lock->rlock);
c0227b98: e3822001 orr r2, r2, #1
c0227b9c: e7812183 str r2, [r1, r3, lsl #3]
c0227ba0: e5942004 ldr r2, [r4, #4]
struct hlist_nulls_node *first = h->first;
c0227ba4: e0822183 add r2, r2, r3, lsl #3
hlist_nulls_add_head_rcu(&udp_sk(sk)->udp_portaddr_node,
c0227ba8: e5820004 str r0, [r2, #4]
n->next = first;
c0227bac: e2833001 add r3, r3, #1
n->pprev = &h->first;
c0227bb0: eafffff3 b c0227b84 <udp_table_init+0xec>
if (!is_a_nulls(first))
c0227bb4: e28dd014 add sp, sp, #20
rcu_assign_pointer(hlist_nulls_first_rcu(h), n);
c0227bb8: e8bd8030 pop {r4, r5, pc}
...
c0227bbc: R_ARM_ABS32 .init.data
c0227bc0: R_ARM_ABS32 kmalloc_caches
c0227bc4 <udp_init>:
nhslot2->count++;
c0227bc4: e92d4010 push {r4, lr}
c0227bc8: e59f4040 ldr r4, [pc, #64] ; c0227c10 <udp_init+0x4c>
c0227bcc: e59f1040 ldr r1, [pc, #64] ; c0227c14 <udp_init+0x50>
raw_spin_unlock(&lock->rlock);
c0227bd0: e1a00004 mov r0, r4
c0227bd4: ebfffffe bl c0227a98 <udp_table_init>
c0227bd4: R_ARM_CALL udp_table_init
c0227bd8: ebfffffe bl 0 <nr_free_buffer_pages>
c0227bd8: R_ARM_CALL nr_free_buffer_pages
c0227bdc: e1a001a0 lsr r0, r0, #3
c0227be0: e3500080 cmp r0, #128 ; 0x80
c0227be4: 33a00080 movcc r0, #128 ; 0x80
c0227be8: e3a02a01 mov r2, #4096 ; 0x1000
raw_spin_unlock_bh(&lock->rlock);
c0227bec: e1a03120 lsr r3, r0, #2
c0227bf0: e0833083 add r3, r3, r3, lsl #1
c0227bf4: e1a01083 lsl r1, r3, #1
}
c0227bf8: e5840014 str r0, [r4, #20]
c0227bfc: e5843010 str r3, [r4, #16]
raw_spin_unlock(&lock->rlock);
c0227c00: e5841018 str r1, [r4, #24]
c0227c04: e584201c str r2, [r4, #28]
c0227c08: e5842020 str r2, [r4, #32]
c0227c0c: e8bd8010 pop {r4, pc}
{
c0227c10: 00000000 .word 0x00000000
c0227c10: R_ARM_ABS32 .data..read_mostly
inet_sk(sk)->inet_num);
c0227c14: 0000025c .word 0x0000025c
c0227c14: R_ARM_ABS32 .rodata.str1.4
Disassembly of section .ref.text:
c0227a30 <udp4_proc_exit_net>:
kfree_skb(skb);
c0227a30: e59f3004 .word 0xe59f3004
{
c0227a34: e5931000 ldr r1, [r3]
kfree_skb(skb);
c0227a38: eafffffe b 0 <proc_net_remove>
c0227a38: R_ARM_JUMP24 proc_net_remove
}
c0227a3c: 00000000 .word 0x00000000
c0227a3c: R_ARM_ABS32 .data
[ 343.740000] Unable to handle kernel paging request at virtual address c155731e
[ 343.750000] pgd = c1e68000
[ 343.750000] [c155731e] *pgd=8140041e(bad)
[ 343.760000] Internal error: Oops: 1 [#1] PREEMPT ARM
[ 343.760000] Modules linked in:
[ 343.760000] CPU: 0 Not tainted (3.4.113.8 #1)
[ 343.760000] PC is at ip_cmsg_recv+0x9c/0x1f8
[ 343.760000] LR is at udp_recvmsg+0x308/0x33c
[ 343.760000] pc : [<c01ebeb8>] lr : [<c020a8ec>] psr: 20000013
[ 343.760000] sp : c1e53cb8 ip : c1e53cc0 fp : 00000045
[ 343.760000] r10: c1e53d34 r9 : 00000045 r8 : 00000000
[ 343.760000] r7 : 000005c0 r6 : c1e53f7c r5 : c14e50a0 r4 : 00000001
[ 343.760000] r3 : c155730e r2 : 00000000 r1 : 6200000a r0 : c1e53f7c
[ 343.760000] Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment user
[ 343.760000] Control: 0005317f Table: 81e68000 DAC: 00000015
[ 343.760000] Process trdp.release (pid: 135, stack limit = 0xc1e52270)
[ 343.760000] Stack: (0xc1e53cb8 to 0xc1e54000)
[ 343.760000] 3ca0: ffffffff c1e53cfc
[ 343.760000] 3cc0: 00000002 6200000a 00000000 00000008 c1e53ec0 1614010a c14e50a0 c1e53f7c
[ 343.760000] 3ce0: c1e12220 000005c0 00000000 00000045 c1e53d34 00000045 00000000 c14e50a0
[ 343.760000] 3d00: c1e53f7c c1e12220 000005c0 c020a8ec c1e53d34 00000091 00000001 00000045
[ 343.760000] 3d20: 00000000 c1e53ec0 00000002 00000000 00000000 00000000 c1506302 c1e53f7c
[ 343.760000] 3d40: 00000000 00000000 00000000 000005c0 00000000 c1e53f7c c1e53ec0 c021246c
[ 343.760000] 3d60: 00000000 00000000 c1e53d74 c00172ec c1e12220 00000010 c1e53d90 00000000
[ 343.760000] 3d80: c3483000 c01b4720 00000000 00000001 c1e16e60 c030cfac 00000000 000005c0
[ 343.760000] 3da0: c3483000 c1e53e58 00000000 c1e53f7c c0327ae8 c000862c 00000041 00001d3a
[ 343.760000] 3dc0: 00000000 00000001 c034a908 ffffffff ff7b66b0 ffffffff 00000000 00000001
[ 343.760000] 3de0: ffffffff 00000000 00000000 00000000 00000000 00000000 c1e16000 00000000
[ 343.760000] 3e00: 00000000 00000000 00000000 00000001 c1e53d90 00000000 00000000 bebc9b78
[ 343.760000] 3e20: 00000004 00000000 00000004 c00afcc0 c1e53e48 c1e53e4c c1e53e50 00000001
[ 343.760000] 3e40: c1e53f7c c3483000 bebc95bc c1e53e80 c1e53f7c c1e53e80 c01b4678 c3483000
[ 343.760000] 3e60: bebc95bc 00000000 c1e53e80 c01b5a94 bebc95d8 00000008 bebc95c0 bebc959c
[ 343.760000] 3e80: b6acc4a5 0000057b 00000050 00000003 c03101d0 08a02e02 00000050 c0049a40
[ 343.760000] 3ea0: 0897ef21 00000050 c1e52000 08a02e02 00000050 c0310278 c03101d0 c004a204
[ 343.760000] 3ec0: b0040002 1614010a 00000000 00000000 00000050 c003b45c 08976402 00000050
[ 343.760000] 3ee0: 08a02e02 00000050 ffffffff 00000000 c14d0000 c003c2f8 c14d0000 00000002
[ 343.760000] 3f00: c032878c c03104c0 00000000 00000000 ffffffff 00000000 ffffffff 00000000
[ 343.760000] 3f20: c1e53f78 c1e52000 c1e53f78 bebc9cc0 00000001 bebc9cc0 00000008 bebc95bc
[ 343.760000] 3f40: 00000000 c3483000 bebc95bc 00000000 00000129 c000e188 c1e52000 00000000
[ 343.760000] 3f60: bebc97e0 c01b6aa4 00000000 bebc9860 bebc9938 00000000 fffffff7 c1e53ec0
[ 343.760000] 3f80: 00000000 c1e53e80 00000001 bebc959c 00000020 00000000 bebc959c b6acc460
[ 343.760000] 3fa0: 00000000 c000dfe0 bebc959c b6acc460 00000004 bebc95bc 00000000 00000020
[ 343.760000] 3fc0: bebc959c b6acc460 00000000 00000129 bebc97f4 00000000 00056178 bebc97e0
[ 343.760000] 3fe0: 00000004 bebc93d0 0001a904 b6f868dc 60000010 00000004 83ffe831 83ffec31
[ 343.760000] [<c01ebeb8>] (ip_cmsg_recv+0x9c/0x1f8) from [<c020a8ec>] (udp_recvmsg+0x308/0x33c)
[ 343.760000] [<c020a8ec>] (udp_recvmsg+0x308/0x33c) from [<c021246c>] (inet_recvmsg+0x38/0x4c)
[ 343.760000] [<c021246c>] (inet_recvmsg+0x38/0x4c) from [<c01b4720>] (sock_recvmsg+0xa8/0xcc)
[ 343.760000] [<c01b4720>] (sock_recvmsg+0xa8/0xcc) from [<c01b5a94>] (___sys_recvmsg.part.4+0xe0/0x1bc)
[ 343.760000] [<c01b5a94>] (___sys_recvmsg.part.4+0xe0/0x1bc) from [<c01b6aa4>] (__sys_recvmsg+0x50/0x80)
[ 343.760000] [<c01b6aa4>] (__sys_recvmsg+0x50/0x80) from [<c000dfe0>] (ret_fast_syscall+0x0/0x2c)
[ 343.760000] Code: e8930007 e88c0007 e5953080 e1a00006 (e593e010)
[ 344.140000] ---[ end trace 4c18bb0f0a672a54 ]---
[ 344.210000] lpc-eth lpc-eth.0: eth0: Ethernet MAC address d2:08:5d:30:db:f4
[ 344.220000] ------------[ cut here ]------------
[ 344.230000] WARNING: at net/ipv4/af_inet.c:153 inet_sock_destruct+0x188/0x1a8()
[ 344.240000] Modules linked in:
[ 344.240000] [<c0013ac8>] (unwind_backtrace+0x0/0xec) from [<c001c588>] (warn_slowpath_common+0x4c/0x64)
[ 344.250000] [<c001c588>] (warn_slowpath_common+0x4c/0x64) from [<c001c63c>] (warn_slowpath_null+0x1c/0x24)
[ 344.260000] [<c001c63c>] (warn_slowpath_null+0x1c/0x24) from [<c0212614>] (inet_sock_destruct+0x188/0x1a8)
[ 344.270000] [<c0212614>] (inet_sock_destruct+0x188/0x1a8) from [<c01b90dc>] (__sk_free+0x18/0x154)
[ 344.280000] [<c01b90dc>] (__sk_free+0x18/0x154) from [<c021282c>] (inet_release+0x44/0x70)
[ 344.290000] [<c021282c>] (inet_release+0x44/0x70) from [<c01b51fc>] (sock_release+0x20/0xc8)
[ 344.300000] [<c01b51fc>] (sock_release+0x20/0xc8) from [<c01b52b8>] (sock_close+0x14/0x2c)
[ 344.300000] [<c01b52b8>] (sock_close+0x14/0x2c) from [<c009f754>] (fput+0xb4/0x27c)
[ 344.310000] [<c009f754>] (fput+0xb4/0x27c) from [<c009cd5c>] (filp_close+0x64/0x88)
[ 344.320000] [<c009cd5c>] (filp_close+0x64/0x88) from [<c001fb28>] (put_files_struct+0x80/0xe0)
[ 344.330000] [<c001fb28>] (put_files_struct+0x80/0xe0) from [<c0020388>] (do_exit+0x4c8/0x748)
[ 344.340000] [<c0020388>] (do_exit+0x4c8/0x748) from [<c0011894>] (die+0x214/0x240)
[ 344.350000] [<c0011894>] (die+0x214/0x240) from [<c0231b98>] (__do_kernel_fault.part.0+0x54/0x74)
[ 344.360000] [<c0231b98>] (__do_kernel_fault.part.0+0x54/0x74) from [<c0015188>] (do_bad_area+0x88/0x8c)
[ 344.370000] [<c0015188>] (do_bad_area+0x88/0x8c) from [<c00173dc>] (do_alignment+0xf0/0x938)
[ 344.370000] [<c00173dc>] (do_alignment+0xf0/0x938) from [<c000862c>] (do_DataAbort+0x34/0x98)
[ 344.380000] [<c000862c>] (do_DataAbort+0x34/0x98) from [<c000db98>] (__dabt_svc+0x38/0x60)
[ 344.390000] Exception stack(0xc1e53c70 to 0xc1e53cb8)
[ 344.400000] 3c60: c1e53f7c 6200000a 00000000 c155730e
[ 344.400000] 3c80: 00000001 c14e50a0 c1e53f7c 000005c0 00000000 00000045 c1e53d34 00000045
[ 344.410000] 3ca0: c1e53cc0 c1e53cb8 c020a8ec c01ebeb8 20000013 ffffffff
[ 344.420000] [<c000db98>] (__dabt_svc+0x38/0x60) from [<c01ebeb8>] (ip_cmsg_recv+0x9c/0x1f8)
[ 344.430000] [<c01ebeb8>] (ip_cmsg_recv+0x9c/0x1f8) from [<c020a8ec>] (udp_recvmsg+0x308/0x33c)
[ 344.440000] [<c020a8ec>] (udp_recvmsg+0x308/0x33c) from [<c021246c>] (inet_recvmsg+0x38/0x4c)
[ 344.450000] [<c021246c>] (inet_recvmsg+0x38/0x4c) from [<c01b4720>] (sock_recvmsg+0xa8/0xcc)
[ 344.450000] [<c01b4720>] (sock_recvmsg+0xa8/0xcc) from [<c01b5a94>] (___sys_recvmsg.part.4+0xe0/0x1bc)
[ 344.460000] [<c01b5a94>] (___sys_recvmsg.part.4+0xe0/0x1bc) from [<c01b6aa4>] (__sys_recvmsg+0x50/0x80)
[ 344.470000] [<c01b6aa4>] (__sys_recvmsg+0x50/0x80) from [<c000dfe0>] (ret_fast_syscall+0x0/0x2c)
[ 344.480000] ---[ end trace 4c18bb0f0a672a55 ]---
[ 344.490000] ------------[ cut here ]------------
[ 344.490000] WARNING: at net/ipv4/af_inet.c:156 inet_sock_destruct+0x158/0x1a8()
[ 344.500000] Modules linked in:
[ 344.500000] [<c0013ac8>] (unwind_backtrace+0x0/0xec) from [<c001c588>] (warn_slowpath_common+0x4c/0x64)
[ 344.510000] [<c001c588>] (warn_slowpath_common+0x4c/0x64) from [<c001c63c>] (warn_slowpath_null+0x1c/0x24)
[ 344.520000] [<c001c63c>] (warn_slowpath_null+0x1c/0x24) from [<c02125e4>] (inet_sock_destruct+0x158/0x1a8)
[ 344.530000] [<c02125e4>] (inet_sock_destruct+0x158/0x1a8) from [<c01b90dc>] (__sk_free+0x18/0x154)
[ 344.540000] [<c01b90dc>] (__sk_free+0x18/0x154) from [<c021282c>] (inet_release+0x44/0x70)
[ 344.550000] [<c021282c>] (inet_release+0x44/0x70) from [<c01b51fc>] (sock_release+0x20/0xc8)
[ 344.560000] [<c01b51fc>] (sock_release+0x20/0xc8) from [<c01b52b8>] (sock_close+0x14/0x2c)
[ 344.570000] [<c01b52b8>] (sock_close+0x14/0x2c) from [<c009f754>] (fput+0xb4/0x27c)
[ 344.580000] [<c009f754>] (fput+0xb4/0x27c) from [<c009cd5c>] (filp_close+0x64/0x88)
[ 344.580000] [<c009cd5c>] (filp_close+0x64/0x88) from [<c001fb28>] (put_files_struct+0x80/0xe0)
[ 344.590000] [<c001fb28>] (put_files_struct+0x80/0xe0) from [<c0020388>] (do_exit+0x4c8/0x748)
[ 344.600000] [<c0020388>] (do_exit+0x4c8/0x748) from [<c0011894>] (die+0x214/0x240)
[ 344.610000] [<c0011894>] (die+0x214/0x240) from [<c0231b98>] (__do_kernel_fault.part.0+0x54/0x74)
[ 344.620000] [<c0231b98>] (__do_kernel_fault.part.0+0x54/0x74) from [<c0015188>] (do_bad_area+0x88/0x8c)
[ 344.630000] [<c0015188>] (do_bad_area+0x88/0x8c) from [<c00173dc>] (do_alignment+0xf0/0x938)
[ 344.640000] [<c00173dc>] (do_alignment+0xf0/0x938) from [<c000862c>] (do_DataAbort+0x34/0x98)
[ 344.650000] [<c000862c>] (do_DataAbort+0x34/0x98) from [<c000db98>] (__dabt_svc+0x38/0x60)
[ 344.650000] Exception stack(0xc1e53c70 to 0xc1e53cb8)
[ 344.660000] 3c60: c1e53f7c 6200000a 00000000 c155730e
[ 344.670000] 3c80: 00000001 c14e50a0 c1e53f7c 000005c0 00000000 00000045 c1e53d34 00000045
[ 344.680000] 3ca0: c1e53cc0 c1e53cb8 c020a8ec c01ebeb8 20000013 ffffffff
[ 344.680000] [<c000db98>] (__dabt_svc+0x38/0x60) from [<c01ebeb8>] (ip_cmsg_recv+0x9c/0x1f8)
[ 344.690000] [<c01ebeb8>] (ip_cmsg_recv+0x9c/0x1f8) from [<c020a8ec>] (udp_recvmsg+0x308/0x33c)
[ 344.700000] [<c020a8ec>] (udp_recvmsg+0x308/0x33c) from [<c021246c>] (inet_recvmsg+0x38/0x4c)
[ 344.710000] [<c021246c>] (inet_recvmsg+0x38/0x4c) from [<c01b4720>] (sock_recvmsg+0xa8/0xcc)
[ 344.720000] [<c01b4720>] (sock_recvmsg+0xa8/0xcc) from [<c01b5a94>] (___sys_recvmsg.part.4+0xe0/0x1bc)
[ 344.730000] [<c01b5a94>] (___sys_recvmsg.part.4+0xe0/0x1bc) from [<c01b6aa4>] (__sys_recvmsg+0x50/0x80)
[ 344.740000] [<c01b6aa4>] (__sys_recvmsg+0x50/0x80) from [<c000dfe0>] (ret_fast_syscall+0x0/0x2c)
[ 344.750000] ---[ end trace 4c18bb0f0a672a56 ]---
#
# Automatically generated file; DO NOT EDIT.
# Linux/arm 3.4.113 Kernel Configuration
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
CONFIG_GENERIC_GPIO=y
# CONFIG_ARCH_USES_GETTIMEOFFSET is not set
CONFIG_GENERIC_CLOCKEVENTS=y
CONFIG_KTIME_SCALAR=y
CONFIG_HAVE_PROC_CPU=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
CONFIG_LOCKDEP_SUPPORT=y
CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_NEED_DMA_MAP_STATE=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_ARM_PATCH_PHYS_VIRT=y
CONFIG_GENERIC_BUG=y
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
CONFIG_HAVE_IRQ_WORK=y
CONFIG_IRQ_WORK=y
#
# General setup
#
CONFIG_EXPERIMENTAL=y
CONFIG_BROKEN_ON_SMP=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_CROSS_COMPILE=""
CONFIG_LOCALVERSION=".7"
CONFIG_LOCALVERSION_AUTO=y
CONFIG_HAVE_KERNEL_GZIP=y
CONFIG_HAVE_KERNEL_LZMA=y
CONFIG_HAVE_KERNEL_XZ=y
CONFIG_HAVE_KERNEL_LZO=y
# CONFIG_KERNEL_GZIP is not set
# CONFIG_KERNEL_LZMA is not set
CONFIG_KERNEL_XZ=y
# CONFIG_KERNEL_LZO is not set
CONFIG_DEFAULT_HOSTNAME="mlc"
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
# CONFIG_POSIX_MQUEUE is not set
# CONFIG_BSD_PROCESS_ACCT is not set
CONFIG_FHANDLE=y
# CONFIG_TASKSTATS is not set
# CONFIG_AUDIT is not set
CONFIG_HAVE_GENERIC_HARDIRQS=y
#
# IRQ subsystem
#
CONFIG_GENERIC_HARDIRQS=y
CONFIG_GENERIC_IRQ_SHOW=y
CONFIG_GENERIC_IRQ_CHIP=y
CONFIG_IRQ_DOMAIN=y
#
# RCU Subsystem
#
CONFIG_TINY_PREEMPT_RCU=y
CONFIG_PREEMPT_RCU=y
# CONFIG_TREE_RCU_TRACE is not set
# CONFIG_RCU_BOOST is not set
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=17
CONFIG_CGROUPS=y
# CONFIG_CGROUP_DEBUG is not set
# CONFIG_CGROUP_FREEZER is not set
# CONFIG_CGROUP_DEVICE is not set
# CONFIG_CPUSETS is not set
# CONFIG_CGROUP_CPUACCT is not set
# CONFIG_RESOURCE_COUNTERS is not set
# CONFIG_CGROUP_PERF is not set
# CONFIG_CGROUP_SCHED is not set
# CONFIG_CHECKPOINT_RESTORE is not set
# CONFIG_NAMESPACES is not set
# CONFIG_SCHED_AUTOGROUP is not set
CONFIG_SYSFS_DEPRECATED=y
CONFIG_SYSFS_DEPRECATED_V2=y
# CONFIG_RELAY is not set
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
CONFIG_RD_GZIP=y
CONFIG_RD_BZIP2=y
CONFIG_RD_LZMA=y
CONFIG_RD_XZ=y
CONFIG_RD_LZO=y
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_SYSCTL=y
CONFIG_ANON_INODES=y
CONFIG_EXPERT=y
CONFIG_UID16=y
# CONFIG_SYSCTL_SYSCALL is not set
CONFIG_KALLSYMS=y
# CONFIG_KALLSYMS_ALL is not set
CONFIG_HOTPLUG=y
CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
CONFIG_AIO=y
CONFIG_EMBEDDED=y
CONFIG_HAVE_PERF_EVENTS=y
CONFIG_PERF_USE_VMALLOC=y
#
# Kernel Performance Events And Counters
#
CONFIG_PERF_EVENTS=y
# CONFIG_PERF_COUNTERS is not set
# CONFIG_DEBUG_PERF_USE_VMALLOC is not set
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_SLUB_DEBUG=y
CONFIG_COMPAT_BRK=y
# CONFIG_SLAB is not set
CONFIG_SLUB=y
# CONFIG_SLOB is not set
# CONFIG_PROFILING is not set
CONFIG_HAVE_OPROFILE=y
# CONFIG_KPROBES is not set
# CONFIG_JUMP_LABEL is not set
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y
CONFIG_HAVE_CLK=y
CONFIG_HAVE_DMA_API_DEBUG=y
CONFIG_HAVE_ARCH_JUMP_LABEL=y
#
# GCOV-based kernel profiling
#
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
# CONFIG_MODULE_FORCE_LOAD is not set
CONFIG_MODULE_UNLOAD=y
# CONFIG_MODULE_FORCE_UNLOAD is not set
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
# CONFIG_BLOCK is not set
# CONFIG_INLINE_SPIN_TRYLOCK is not set
# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
# CONFIG_INLINE_SPIN_LOCK is not set
# CONFIG_INLINE_SPIN_LOCK_BH is not set
# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
CONFIG_UNINLINE_SPIN_UNLOCK=y
# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
# CONFIG_INLINE_READ_TRYLOCK is not set
# CONFIG_INLINE_READ_LOCK is not set
# CONFIG_INLINE_READ_LOCK_BH is not set
# CONFIG_INLINE_READ_LOCK_IRQ is not set
# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
# CONFIG_INLINE_READ_UNLOCK is not set
# CONFIG_INLINE_READ_UNLOCK_BH is not set
# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
# CONFIG_INLINE_WRITE_TRYLOCK is not set
# CONFIG_INLINE_WRITE_LOCK is not set
# CONFIG_INLINE_WRITE_LOCK_BH is not set
# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
# CONFIG_INLINE_WRITE_UNLOCK is not set
# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
# CONFIG_MUTEX_SPIN_ON_OWNER is not set
# CONFIG_FREEZER is not set
#
# System Type
#
CONFIG_MMU=y
# CONFIG_ARCH_INTEGRATOR is not set
# CONFIG_ARCH_REALVIEW is not set
# CONFIG_ARCH_VERSATILE is not set
# CONFIG_ARCH_VEXPRESS is not set
# CONFIG_ARCH_AT91 is not set
# CONFIG_ARCH_BCMRING is not set
# CONFIG_ARCH_HIGHBANK is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CNS3XXX is not set
# CONFIG_ARCH_GEMINI is not set
# CONFIG_ARCH_PRIMA2 is not set
# CONFIG_ARCH_EBSA110 is not set
# CONFIG_ARCH_EP93XX is not set
# CONFIG_ARCH_FOOTBRIDGE is not set
# CONFIG_ARCH_MXC is not set
# CONFIG_ARCH_MXS is not set
# CONFIG_ARCH_NETX is not set
# CONFIG_ARCH_H720X is not set
# CONFIG_ARCH_IOP13XX is not set
# CONFIG_ARCH_IOP32X is not set
# CONFIG_ARCH_IOP33X is not set
# CONFIG_ARCH_IXP23XX is not set
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_DOVE is not set
# CONFIG_ARCH_KIRKWOOD is not set
CONFIG_ARCH_LPC32XX=y
# CONFIG_ARCH_MV78XX0 is not set
# CONFIG_ARCH_ORION5X is not set
# CONFIG_ARCH_MMP is not set
# CONFIG_ARCH_KS8695 is not set
# CONFIG_ARCH_W90X900 is not set
# CONFIG_ARCH_TEGRA is not set
# CONFIG_ARCH_PICOXCELL is not set
# CONFIG_ARCH_PNX4008 is not set
# CONFIG_ARCH_PXA is not set
# CONFIG_ARCH_MSM is not set
# CONFIG_ARCH_SHMOBILE is not set
# CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_SA1100 is not set
# CONFIG_ARCH_S3C24XX is not set
# CONFIG_ARCH_S3C64XX is not set
# CONFIG_ARCH_S5P64X0 is not set
# CONFIG_ARCH_S5PC100 is not set
# CONFIG_ARCH_S5PV210 is not set
# CONFIG_ARCH_EXYNOS is not set
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_U300 is not set
# CONFIG_ARCH_U8500 is not set
# CONFIG_ARCH_NOMADIK is not set
# CONFIG_ARCH_DAVINCI is not set
# CONFIG_ARCH_OMAP is not set
# CONFIG_PLAT_SPEAR is not set
# CONFIG_ARCH_VT8500 is not set
# CONFIG_ARCH_ZYNQ is not set
CONFIG_GPIO_PCA953X=y
#
# Individual UART enable selections
#
# CONFIG_ARCH_LPC32XX_UART3_SELECT is not set
CONFIG_ARCH_LPC32XX_UART4_SELECT=y
CONFIG_ARCH_LPC32XX_UART5_SELECT=y
# CONFIG_ARCH_LPC32XX_UART6_SELECT is not set
#
# LPC32XX chip components
#
CONFIG_ARCH_LPC32XX_IRAM_FOR_NET=y
# CONFIG_ARCH_LPC32XX_MII_SUPPORT is not set
#
# System MMU
#
#
# Processor Type
#
CONFIG_CPU_ARM926T=y
CONFIG_CPU_32v5=y
CONFIG_CPU_ABRT_EV5TJ=y
CONFIG_CPU_PABRT_LEGACY=y
CONFIG_CPU_CACHE_VIVT=y
CONFIG_CPU_COPY_V4WB=y
CONFIG_CPU_TLB_V4WBI=y
CONFIG_CPU_CP15=y
CONFIG_CPU_CP15_MMU=y
CONFIG_CPU_USE_DOMAINS=y
#
# Processor Features
#
# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
CONFIG_ARM_THUMB=y
# CONFIG_CPU_ICACHE_DISABLE is not set
# CONFIG_CPU_DCACHE_DISABLE is not set
# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
# CONFIG_CACHE_L2X0 is not set
CONFIG_ARM_L1_CACHE_SHIFT=5
CONFIG_ARM_NR_BANKS=8
#
# Bus support
#
CONFIG_ARM_AMBA=y
# CONFIG_PCI_SYSCALL is not set
# CONFIG_ARCH_SUPPORTS_MSI is not set
# CONFIG_PCCARD is not set
#
# Kernel Features
#
CONFIG_TICK_ONESHOT=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_VMSPLIT_3G=y
# CONFIG_VMSPLIT_2G is not set
# CONFIG_VMSPLIT_1G is not set
CONFIG_PAGE_OFFSET=0xC0000000
CONFIG_ARCH_NR_GPIO=0
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not set
CONFIG_PREEMPT=y
CONFIG_PREEMPT_COUNT=y
CONFIG_HZ=100
CONFIG_AEABI=y
CONFIG_OABI_COMPAT=y
# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
CONFIG_HAVE_ARCH_PFN_VALID=y
CONFIG_HIGHMEM=y
CONFIG_HIGHPTE=y
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
CONFIG_FLATMEM=y
CONFIG_FLAT_NODE_MEM_MAP=y
CONFIG_HAVE_MEMBLOCK=y
CONFIG_PAGEFLAGS_EXTENDED=y
CONFIG_SPLIT_PTLOCK_CPUS=999999
CONFIG_COMPACTION=y
CONFIG_MIGRATION=y
# CONFIG_PHYS_ADDR_T_64BIT is not set
CONFIG_ZONE_DMA_FLAG=0
CONFIG_VIRT_TO_BUS=y
# CONFIG_KSM is not set
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_NEED_PER_CPU_KM=y
# CONFIG_CLEANCACHE is not set
CONFIG_FORCE_MAX_ZONEORDER=11
CONFIG_ALIGNMENT_TRAP=y
# CONFIG_UACCESS_WITH_MEMCPY is not set
# CONFIG_SECCOMP is not set
# CONFIG_CC_STACKPROTECTOR is not set
# CONFIG_DEPRECATED_PARAM_STRUCT is not set
#
# Boot options
#
CONFIG_USE_OF=y
CONFIG_ZBOOT_ROM_TEXT=0
CONFIG_ZBOOT_ROM_BSS=0
# CONFIG_ARM_APPENDED_DTB is not set
CONFIG_CMDLINE="console=ttyS0,115200"
CONFIG_CMDLINE_FROM_BOOTLOADER=y
# CONFIG_CMDLINE_EXTEND is not set
# CONFIG_CMDLINE_FORCE is not set
# CONFIG_XIP_KERNEL is not set
CONFIG_KEXEC=y
CONFIG_ATAGS_PROC=y
# CONFIG_CRASH_DUMP is not set
CONFIG_AUTO_ZRELADDR=y
#
# CPU Power Management
#
CONFIG_CPU_IDLE=y
CONFIG_CPU_IDLE_GOV_LADDER=y
CONFIG_CPU_IDLE_GOV_MENU=y
#
# Floating point emulation
#
#
# At least one emulation must be selected
#
# CONFIG_FPE_NWFPE is not set
# CONFIG_FPE_FASTFPE is not set
CONFIG_VFP=y
#
# Userspace binary formats
#
CONFIG_BINFMT_ELF=y
CONFIG_ARCH_BINFMT_ELF_RANDOMIZE_PIE=y
CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
# CONFIG_HAVE_AOUT is not set
# CONFIG_BINFMT_MISC is not set
#
# Power management options
#
# CONFIG_SUSPEND is not set
# CONFIG_PM_RUNTIME is not set
CONFIG_CPU_PM=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
# CONFIG_ARM_CPU_SUSPEND is not set
CONFIG_NET=y
#
# Networking options
#
CONFIG_PACKET=y
CONFIG_UNIX=y
# CONFIG_UNIX_DIAG is not set
# CONFIG_NET_KEY is not set
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
# CONFIG_IP_ADVANCED_ROUTER is not set
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_IP_PNP_BOOTP=y
CONFIG_IP_PNP_RARP=y
# CONFIG_NET_IPIP is not set
# CONFIG_NET_IPGRE_DEMUX is not set
# CONFIG_IP_MROUTE is not set
# CONFIG_ARPD is not set
# CONFIG_SYN_COOKIES is not set
# CONFIG_INET_AH is not set
# CONFIG_INET_ESP is not set
# CONFIG_INET_IPCOMP is not set
# CONFIG_INET_XFRM_TUNNEL is not set
# CONFIG_INET_TUNNEL is not set
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
# CONFIG_INET_XFRM_MODE_BEET is not set
CONFIG_INET_LRO=y
# CONFIG_INET_DIAG is not set
# CONFIG_TCP_CONG_ADVANCED is not set
CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_TCP_MD5SIG is not set
# CONFIG_IPV6 is not set
# CONFIG_NETWORK_SECMARK is not set
# CONFIG_NETWORK_PHY_TIMESTAMPING is not set
# CONFIG_NETFILTER is not set
# CONFIG_IP_DCCP is not set
# CONFIG_IP_SCTP is not set
# CONFIG_RDS is not set
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
# CONFIG_L2TP is not set
CONFIG_STP=y
CONFIG_GARP=y
# CONFIG_BRIDGE is not set
# CONFIG_NET_DSA is not set
CONFIG_VLAN_8021Q=y
CONFIG_VLAN_8021Q_GVRP=y
# CONFIG_DECNET is not set
CONFIG_LLC=y
# CONFIG_LLC2 is not set
# CONFIG_IPX is not set
# CONFIG_ATALK is not set
# CONFIG_X25 is not set
# CONFIG_LAPB is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
# CONFIG_PHONET is not set
# CONFIG_IEEE802154 is not set
# CONFIG_NET_SCHED is not set
# CONFIG_DCB is not set
CONFIG_DNS_RESOLVER=y
# CONFIG_BATMAN_ADV is not set
# CONFIG_OPENVSWITCH is not set
# CONFIG_NETPRIO_CGROUP is not set
CONFIG_BQL=y
CONFIG_HAVE_BPF_JIT=y
# CONFIG_BPF_JIT is not set
#
# Network testing
#
# CONFIG_NET_PKTGEN is not set
# CONFIG_HAMRADIO is not set
CONFIG_CAN=y
CONFIG_CAN_RAW=y
CONFIG_CAN_BCM=y
# CONFIG_CAN_GW is not set
#
# CAN Device Drivers
#
# CONFIG_CAN_VCAN is not set
# CONFIG_CAN_SLCAN is not set
CONFIG_CAN_DEV=y
CONFIG_CAN_CALC_BITTIMING=y
CONFIG_CAN_MCP251X=y
# CONFIG_CAN_SJA1000 is not set
# CONFIG_CAN_C_CAN is not set
# CONFIG_CAN_CC770 is not set
# CONFIG_CAN_SOFTING is not set
# CONFIG_CAN_DEBUG_DEVICES is not set
# CONFIG_IRDA is not set
# CONFIG_BT is not set
# CONFIG_AF_RXRPC is not set
# CONFIG_WIRELESS is not set
# CONFIG_WIMAX is not set
# CONFIG_RFKILL is not set
# CONFIG_RFKILL_REGULATOR is not set
# CONFIG_NET_9P is not set
# CONFIG_CAIF is not set
# CONFIG_CEPH_LIB is not set
# CONFIG_NFC is not set
#
# Device Drivers
#
#
# Generic Driver Options
#
CONFIG_UEVENT_HELPER_PATH=""
CONFIG_DEVTMPFS=y
CONFIG_DEVTMPFS_MOUNT=y
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
CONFIG_FIRMWARE_IN_KERNEL=y
CONFIG_EXTRA_FIRMWARE=""
# CONFIG_DEBUG_DRIVER is not set
# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
# CONFIG_GENERIC_CPU_DEVICES is not set
# CONFIG_DMA_SHARED_BUFFER is not set
# CONFIG_CONNECTOR is not set
CONFIG_MTD=y
# CONFIG_MTD_TESTS is not set
# CONFIG_MTD_REDBOOT_PARTS is not set
CONFIG_MTD_CMDLINE_PARTS=y
CONFIG_MTD_AFS_PARTS=y
CONFIG_MTD_OF_PARTS=y
# CONFIG_MTD_AR7_PARTS is not set
#
# User Modules And Translation Layers
#
CONFIG_MTD_CHAR=y
CONFIG_MTD_OOPS=y
#
# RAM/ROM/Flash chip drivers
#
# CONFIG_MTD_CFI is not set
# CONFIG_MTD_JEDECPROBE is not set
CONFIG_MTD_MAP_BANK_WIDTH_1=y
CONFIG_MTD_MAP_BANK_WIDTH_2=y
CONFIG_MTD_MAP_BANK_WIDTH_4=y
# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
CONFIG_MTD_CFI_I1=y
CONFIG_MTD_CFI_I2=y
# CONFIG_MTD_CFI_I4 is not set
# CONFIG_MTD_CFI_I8 is not set
CONFIG_MTD_RAM=y
# CONFIG_MTD_ROM is not set
# CONFIG_MTD_ABSENT is not set
#
# Mapping drivers for chip access
#
CONFIG_MTD_COMPLEX_MAPPINGS=y
CONFIG_MTD_GPIO_ADDR=y
CONFIG_MTD_PLATRAM=y
# CONFIG_MTD_LATCH_ADDR is not set
#
# Self-contained MTD device drivers
#
# CONFIG_MTD_DATAFLASH is not set
CONFIG_MTD_M25P80=y
CONFIG_M25PXX_USE_FAST_READ=y
# CONFIG_MTD_SST25L is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
# CONFIG_MTD_MTDRAM is not set
#
# Disk-On-Chip Device Drivers
#
# CONFIG_MTD_DOC2000 is not set
# CONFIG_MTD_DOC2001 is not set
# CONFIG_MTD_DOC2001PLUS is not set
# CONFIG_MTD_DOCG3 is not set
CONFIG_MTD_NAND_ECC=y
CONFIG_MTD_NAND_ECC_SMC=y
CONFIG_MTD_NAND=y
# CONFIG_MTD_NAND_VERIFY_WRITE is not set
CONFIG_MTD_NAND_BCH=y
CONFIG_MTD_NAND_ECC_BCH=y
# CONFIG_MTD_SM_COMMON is not set
# CONFIG_MTD_NAND_MUSEUM_IDS is not set
# CONFIG_MTD_NAND_GPIO is not set
CONFIG_MTD_NAND_IDS=y
# CONFIG_MTD_NAND_DISKONCHIP is not set
# CONFIG_MTD_NAND_DOCG4 is not set
# CONFIG_MTD_NAND_NANDSIM is not set
CONFIG_MTD_NAND_PLATFORM=y
# CONFIG_MTD_ONENAND is not set
#
# LPDDR flash memory drivers
#
# CONFIG_MTD_LPDDR is not set
CONFIG_MTD_UBI=y
CONFIG_MTD_UBI_WL_THRESHOLD=4096
CONFIG_MTD_UBI_BEB_RESERVE=1
CONFIG_MTD_UBI_GLUEBI=y
# CONFIG_MTD_UBI_DEBUG is not set
CONFIG_DTC=y
CONFIG_OF=y
#
# Device Tree and Open Firmware support
#
# CONFIG_PROC_DEVICETREE is not set
# CONFIG_OF_SELFTEST is not set
CONFIG_OF_FLATTREE=y
CONFIG_OF_EARLY_FLATTREE=y
CONFIG_OF_ADDRESS=y
CONFIG_OF_IRQ=y
CONFIG_OF_DEVICE=y
CONFIG_OF_GPIO=y
CONFIG_OF_I2C=y
CONFIG_OF_NET=y
CONFIG_OF_SPI=y
CONFIG_OF_MDIO=y
CONFIG_OF_MTD=y
# CONFIG_PARPORT is not set
#
# Misc devices
#
# CONFIG_AD525X_DPOT is not set
# CONFIG_ATMEL_PWM is not set
# CONFIG_ICS932S401 is not set
# CONFIG_ENCLOSURE_SERVICES is not set
# CONFIG_APDS9802ALS is not set
# CONFIG_ISL29003 is not set
# CONFIG_ISL29020 is not set
# CONFIG_SENSORS_TSL2550 is not set
# CONFIG_SENSORS_BH1780 is not set
# CONFIG_SENSORS_BH1770 is not set
# CONFIG_SENSORS_APDS990X is not set
# CONFIG_HMC6352 is not set
# CONFIG_DS1682 is not set
# CONFIG_TI_DAC7512 is not set
# CONFIG_BMP085 is not set
# CONFIG_USB_SWITCH_FSA9480 is not set
# CONFIG_C2PORT is not set
#
# EEPROM support
#
# CONFIG_EEPROM_AT24 is not set
# CONFIG_EEPROM_AT25 is not set
# CONFIG_EEPROM_LEGACY is not set
# CONFIG_EEPROM_MAX6875 is not set
# CONFIG_EEPROM_93CX6 is not set
# CONFIG_EEPROM_93XX46 is not set
# CONFIG_IWMC3200TOP is not set
#
# Texas Instruments shared transport line discipline
#
# CONFIG_TI_ST is not set
#
# Altera FPGA firmware download module
#
# CONFIG_ALTERA_STAPL is not set
CONFIG_HAVE_IDE=y
#
# SCSI device support
#
CONFIG_SCSI_MOD=y
# CONFIG_SCSI_DMA is not set
# CONFIG_SCSI_NETLINK is not set
CONFIG_NETDEVICES=y
CONFIG_NET_CORE=y
# CONFIG_BONDING is not set
# CONFIG_DUMMY is not set
# CONFIG_EQUALIZER is not set
# CONFIG_MII is not set
# CONFIG_NET_TEAM is not set
# CONFIG_MACVLAN is not set
# CONFIG_NETCONSOLE is not set
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
# CONFIG_TUN is not set
# CONFIG_VETH is not set
#
# CAIF transport drivers
#
CONFIG_ETHERNET=y
CONFIG_NET_VENDOR_BROADCOM=y
# CONFIG_B44 is not set
# CONFIG_NET_CALXEDA_XGMAC is not set
CONFIG_NET_VENDOR_CHELSIO=y
CONFIG_NET_VENDOR_CIRRUS=y
# CONFIG_CS89x0 is not set
# CONFIG_DM9000 is not set
# CONFIG_DNET is not set
CONFIG_NET_VENDOR_FARADAY=y
# CONFIG_FTMAC100 is not set
# CONFIG_FTGMAC100 is not set
CONFIG_NET_VENDOR_INTEL=y
CONFIG_NET_VENDOR_I825XX=y
CONFIG_NET_VENDOR_MARVELL=y
CONFIG_NET_VENDOR_MICREL=y
# CONFIG_KS8851 is not set
# CONFIG_KS8851_MLL is not set
CONFIG_NET_VENDOR_MICROCHIP=y
# CONFIG_ENC28J60 is not set
CONFIG_NET_VENDOR_NATSEMI=y
CONFIG_NET_VENDOR_8390=y
# CONFIG_AX88796 is not set
# CONFIG_LPC_ENET is not set
# CONFIG_ETHOC is not set
CONFIG_NET_VENDOR_SEEQ=y
# CONFIG_SEEQ8005 is not set
CONFIG_NET_VENDOR_SMSC=y
# CONFIG_SMC91X is not set
# CONFIG_SMC911X is not set
# CONFIG_SMSC911X is not set
CONFIG_NET_VENDOR_STMICRO=y
# CONFIG_STMMAC_ETH is not set
CONFIG_PHYLIB=y
#
# MII PHY device drivers
#
# CONFIG_AMD_PHY is not set
# CONFIG_MARVELL_PHY is not set
# CONFIG_DAVICOM_PHY is not set
# CONFIG_QSEMI_PHY is not set
# CONFIG_LXT_PHY is not set
# CONFIG_CICADA_PHY is not set
# CONFIG_VITESSE_PHY is not set
# CONFIG_SMSC_PHY is not set
# CONFIG_BROADCOM_PHY is not set
# CONFIG_ICPLUS_PHY is not set
# CONFIG_REALTEK_PHY is not set
# CONFIG_NATIONAL_PHY is not set
# CONFIG_STE10XP is not set
# CONFIG_LSI_ET1011C_PHY is not set
# CONFIG_MICREL_PHY is not set
CONFIG_FIXED_PHY=y
# CONFIG_MDIO_BITBANG is not set
# CONFIG_MICREL_KS8995MA is not set
# CONFIG_PPP is not set
# CONFIG_SLIP is not set
# CONFIG_WLAN is not set
#
# Enable WiMAX (Networking options) to see the WiMAX drivers
#
# CONFIG_WAN is not set
# CONFIG_ISDN is not set
#
# Input device support
#
# CONFIG_INPUT is not set
#
# Hardware I/O ports
#
# CONFIG_SERIO is not set
# CONFIG_GAMEPORT is not set
#
# Character devices
#
# CONFIG_VT is not set
# CONFIG_UNIX98_PTYS is not set
# CONFIG_LEGACY_PTYS is not set
# CONFIG_SERIAL_NONSTANDARD is not set
# CONFIG_N_GSM is not set
# CONFIG_TRACE_SINK is not set
# CONFIG_DEVKMEM is not set
#
# Serial drivers
#
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_8250_NR_UARTS=4
CONFIG_SERIAL_8250_RUNTIME_UARTS=4
# CONFIG_SERIAL_8250_EXTENDED is not set
# CONFIG_SERIAL_8250_DW is not set
#
# Non-8250 serial port support
#
# CONFIG_SERIAL_AMBA_PL010 is not set
CONFIG_SERIAL_AMBA_PL011=y
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
# CONFIG_SERIAL_MAX3100 is not set
# CONFIG_SERIAL_MAX3107 is not set
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
CONFIG_SERIAL_OF_PLATFORM=y
# CONFIG_SERIAL_TIMBERDALE is not set
# CONFIG_SERIAL_ALTERA_JTAGUART is not set
# CONFIG_SERIAL_ALTERA_UART is not set
# CONFIG_SERIAL_IFX6X60 is not set
CONFIG_SERIAL_XILINX_PS_UART=y
CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y
# CONFIG_TTY_PRINTK is not set
# CONFIG_HVC_DCC is not set
# CONFIG_IPMI_HANDLER is not set
CONFIG_HW_RANDOM=y
# CONFIG_HW_RANDOM_TIMERIOMEM is not set
# CONFIG_R3964 is not set
# CONFIG_TCG_TPM is not set
# CONFIG_RAMOOPS is not set
CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_COMPAT=y
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_MUX=y
#
# Multiplexer I2C Chip support
#
# CONFIG_I2C_MUX_GPIO is not set
# CONFIG_I2C_MUX_PCA9541 is not set
# CONFIG_I2C_MUX_PCA954x is not set
CONFIG_I2C_HELPER_AUTO=y
#
# I2C Hardware Bus support
#
#
# I2C system bus drivers (mostly embedded / system-on-chip)
#
# CONFIG_I2C_DESIGNWARE_PLATFORM is not set
# CONFIG_I2C_GPIO is not set
# CONFIG_I2C_OCORES is not set
# CONFIG_I2C_PCA_PLATFORM is not set
# CONFIG_I2C_PNX is not set
# CONFIG_I2C_PXA_PCI is not set
# CONFIG_I2C_SIMTEC is not set
# CONFIG_I2C_XILINX is not set
#
# External I2C/SMBus adapter drivers
#
# CONFIG_I2C_PARPORT_LIGHT is not set
# CONFIG_I2C_TAOS_EVM is not set
#
# Other I2C/SMBus bus drivers
#
# CONFIG_I2C_STUB is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
CONFIG_SPI=y
# CONFIG_SPI_DEBUG is not set
CONFIG_SPI_MASTER=y
#
# SPI Master Controller Drivers
#
# CONFIG_SPI_ALTERA is not set
# CONFIG_SPI_BITBANG is not set
# CONFIG_SPI_GPIO is not set
# CONFIG_SPI_OC_TINY is not set
# CONFIG_SPI_PL022 is not set
# CONFIG_SPI_PXA2XX_PCI is not set
# CONFIG_SPI_XILINX is not set
# CONFIG_SPI_DESIGNWARE is not set
#
# SPI Protocol Masters
#
# CONFIG_SPI_SPIDEV is not set
# CONFIG_SPI_TLE62X0 is not set
# CONFIG_HSI is not set
#
# PPS support
#
# CONFIG_PPS is not set
#
# PPS generators support
#
#
# PTP clock support
#
#
# Enable Device Drivers -> PPS to see the PTP clock options.
#
CONFIG_ARCH_REQUIRE_GPIOLIB=y
CONFIG_GPIOLIB=y
# CONFIG_DEBUG_GPIO is not set
# CONFIG_GPIO_SYSFS is not set
#
# Memory mapped GPIO drivers:
#
# CONFIG_GPIO_GENERIC_PLATFORM is not set
CONFIG_GPIO_PL061=y
#
# I2C GPIO expanders:
#
# CONFIG_GPIO_MAX7300 is not set
# CONFIG_GPIO_MAX732X is not set
CONFIG_GPIO_PCA953X_IRQ=y
CONFIG_GPIO_PCF857X=y
# CONFIG_GPIO_SX150X is not set
# CONFIG_GPIO_ADP5588 is not set
#
# PCI GPIO expanders:
#
#
# SPI GPIO expanders:
#
# CONFIG_GPIO_MAX7301 is not set
# CONFIG_GPIO_MCP23S08 is not set
# CONFIG_GPIO_MC33880 is not set
# CONFIG_GPIO_74X164 is not set
#
# AC97 GPIO expanders:
#
#
# MODULbus GPIO expanders:
#
# CONFIG_W1 is not set
CONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not set
# CONFIG_PDA_POWER is not set
# CONFIG_TEST_POWER is not set
# CONFIG_BATTERY_DS2780 is not set
# CONFIG_BATTERY_DS2781 is not set
# CONFIG_BATTERY_DS2782 is not set
# CONFIG_BATTERY_SBS is not set
# CONFIG_BATTERY_BQ27x00 is not set
# CONFIG_BATTERY_MAX17040 is not set
# CONFIG_BATTERY_MAX17042 is not set
# CONFIG_CHARGER_MAX8903 is not set
# CONFIG_CHARGER_LP8727 is not set
# CONFIG_CHARGER_GPIO is not set
# CONFIG_CHARGER_MANAGER is not set
# CONFIG_CHARGER_SMB347 is not set
CONFIG_HWMON=y
# CONFIG_HWMON_VID is not set
# CONFIG_HWMON_DEBUG_CHIP is not set
#
# Native drivers
#
# CONFIG_SENSORS_AD7314 is not set
# CONFIG_SENSORS_AD7414 is not set
# CONFIG_SENSORS_AD7418 is not set
# CONFIG_SENSORS_ADCXX is not set
# CONFIG_SENSORS_ADM1021 is not set
# CONFIG_SENSORS_ADM1025 is not set
# CONFIG_SENSORS_ADM1026 is not set
# CONFIG_SENSORS_ADM1029 is not set
# CONFIG_SENSORS_ADM1031 is not set
# CONFIG_SENSORS_ADM9240 is not set
# CONFIG_SENSORS_ADT7411 is not set
# CONFIG_SENSORS_ADT7462 is not set
# CONFIG_SENSORS_ADT7470 is not set
# CONFIG_SENSORS_ADT7475 is not set
# CONFIG_SENSORS_ASC7621 is not set
# CONFIG_SENSORS_ATXP1 is not set
# CONFIG_SENSORS_DS620 is not set
# CONFIG_SENSORS_DS1621 is not set
# CONFIG_SENSORS_F71805F is not set
# CONFIG_SENSORS_F71882FG is not set
# CONFIG_SENSORS_F75375S is not set
# CONFIG_SENSORS_G760A is not set
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_GL520SM is not set
# CONFIG_SENSORS_GPIO_FAN is not set
# CONFIG_SENSORS_IT87 is not set
# CONFIG_SENSORS_JC42 is not set
# CONFIG_SENSORS_LINEAGE is not set
# CONFIG_SENSORS_LM63 is not set
# CONFIG_SENSORS_LM70 is not set
# CONFIG_SENSORS_LM73 is not set
# CONFIG_SENSORS_LM75 is not set
# CONFIG_SENSORS_LM77 is not set
# CONFIG_SENSORS_LM78 is not set
# CONFIG_SENSORS_LM80 is not set
# CONFIG_SENSORS_LM83 is not set
# CONFIG_SENSORS_LM85 is not set
# CONFIG_SENSORS_LM87 is not set
CONFIG_SENSORS_LM90=y
# CONFIG_SENSORS_LM92 is not set
# CONFIG_SENSORS_LM93 is not set
# CONFIG_SENSORS_LTC4151 is not set
# CONFIG_SENSORS_LTC4215 is not set
# CONFIG_SENSORS_LTC4245 is not set
# CONFIG_SENSORS_LTC4261 is not set
# CONFIG_SENSORS_LM95241 is not set
# CONFIG_SENSORS_LM95245 is not set
# CONFIG_SENSORS_MAX1111 is not set
# CONFIG_SENSORS_MAX16065 is not set
# CONFIG_SENSORS_MAX1619 is not set
# CONFIG_SENSORS_MAX1668 is not set
# CONFIG_SENSORS_MAX6639 is not set
# CONFIG_SENSORS_MAX6642 is not set
# CONFIG_SENSORS_MAX6650 is not set
# CONFIG_SENSORS_MCP3021 is not set
# CONFIG_SENSORS_NTC_THERMISTOR is not set
# CONFIG_SENSORS_PC87360 is not set
# CONFIG_SENSORS_PC87427 is not set
# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_PMBUS is not set
# CONFIG_SENSORS_SHT15 is not set
# CONFIG_SENSORS_SHT21 is not set
# CONFIG_SENSORS_SMM665 is not set
# CONFIG_SENSORS_DME1737 is not set
# CONFIG_SENSORS_EMC1403 is not set
# CONFIG_SENSORS_EMC2103 is not set
# CONFIG_SENSORS_EMC6W201 is not set
# CONFIG_SENSORS_SMSC47M1 is not set
# CONFIG_SENSORS_SMSC47M192 is not set
# CONFIG_SENSORS_SMSC47B397 is not set
# CONFIG_SENSORS_SCH56XX_COMMON is not set
# CONFIG_SENSORS_SCH5627 is not set
# CONFIG_SENSORS_SCH5636 is not set
# CONFIG_SENSORS_ADS1015 is not set
# CONFIG_SENSORS_ADS7828 is not set
# CONFIG_SENSORS_ADS7871 is not set
# CONFIG_SENSORS_AMC6821 is not set
# CONFIG_SENSORS_THMC50 is not set
# CONFIG_SENSORS_TMP102 is not set
# CONFIG_SENSORS_TMP401 is not set
# CONFIG_SENSORS_TMP421 is not set
# CONFIG_SENSORS_VT1211 is not set
# CONFIG_SENSORS_W83781D is not set
# CONFIG_SENSORS_W83791D is not set
# CONFIG_SENSORS_W83792D is not set
# CONFIG_SENSORS_W83793 is not set
# CONFIG_SENSORS_W83795 is not set
# CONFIG_SENSORS_W83L785TS is not set
# CONFIG_SENSORS_W83L786NG is not set
# CONFIG_SENSORS_W83627HF is not set
# CONFIG_SENSORS_W83627EHF is not set
CONFIG_THERMAL=y
CONFIG_THERMAL_HWMON=y
# CONFIG_WATCHDOG is not set
CONFIG_SSB_POSSIBLE=y
#
# Sonics Silicon Backplane
#
# CONFIG_SSB is not set
CONFIG_BCMA_POSSIBLE=y
#
# Broadcom specific AMBA
#
# CONFIG_BCMA is not set
#
# Multifunction device drivers
#
# CONFIG_MFD_CORE is not set
# CONFIG_MFD_88PM860X is not set
# CONFIG_MFD_SM501 is not set
# CONFIG_MFD_ASIC3 is not set
# CONFIG_HTC_EGPIO is not set
# CONFIG_HTC_PASIC3 is not set
# CONFIG_HTC_I2CPLD is not set
# CONFIG_TPS6105X is not set
# CONFIG_TPS65010 is not set
# CONFIG_TPS6507X is not set
# CONFIG_MFD_TPS65217 is not set
# CONFIG_MFD_TPS6586X is not set
# CONFIG_MFD_TPS65910 is not set
# CONFIG_MFD_TPS65912_I2C is not set
# CONFIG_MFD_TPS65912_SPI is not set
# CONFIG_TWL4030_CORE is not set
# CONFIG_TWL6040_CORE is not set
# CONFIG_MFD_STMPE is not set
# CONFIG_MFD_TC3589X is not set
# CONFIG_MFD_TMIO is not set
# CONFIG_MFD_T7L66XB is not set
# CONFIG_MFD_TC6387XB is not set
# CONFIG_MFD_TC6393XB is not set
# CONFIG_PMIC_DA903X is not set
# CONFIG_MFD_DA9052_SPI is not set
# CONFIG_MFD_DA9052_I2C is not set
# CONFIG_PMIC_ADP5520 is not set
# CONFIG_MFD_MAX8925 is not set
# CONFIG_MFD_MAX8997 is not set
# CONFIG_MFD_MAX8998 is not set
# CONFIG_MFD_S5M_CORE is not set
# CONFIG_MFD_WM8400 is not set
# CONFIG_MFD_WM831X_I2C is not set
# CONFIG_MFD_WM831X_SPI is not set
# CONFIG_MFD_WM8350_I2C is not set
# CONFIG_MFD_WM8994 is not set
# CONFIG_MFD_PCF50633 is not set
# CONFIG_MFD_MC13XXX is not set
# CONFIG_ABX500_CORE is not set
# CONFIG_EZX_PCAP is not set
# CONFIG_MFD_WL1273_CORE is not set
# CONFIG_MFD_TPS65090 is not set
# CONFIG_MFD_AAT2870_CORE is not set
# CONFIG_MFD_RC5T583 is not set
CONFIG_REGULATOR=y
# CONFIG_REGULATOR_DEBUG is not set
# CONFIG_REGULATOR_DUMMY is not set
CONFIG_REGULATOR_FIXED_VOLTAGE=y
# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
# CONFIG_REGULATOR_GPIO is not set
# CONFIG_REGULATOR_AD5398 is not set
# CONFIG_REGULATOR_ISL6271A is not set
# CONFIG_REGULATOR_MAX1586 is not set
# CONFIG_REGULATOR_MAX8649 is not set
# CONFIG_REGULATOR_MAX8660 is not set
# CONFIG_REGULATOR_MAX8952 is not set
# CONFIG_REGULATOR_LP3971 is not set
# CONFIG_REGULATOR_LP3972 is not set
# CONFIG_REGULATOR_TPS62360 is not set
# CONFIG_REGULATOR_TPS65023 is not set
# CONFIG_REGULATOR_TPS6507X is not set
# CONFIG_REGULATOR_TPS6524X is not set
# CONFIG_MEDIA_SUPPORT is not set
#
# Graphics support
#
# CONFIG_DRM is not set
# CONFIG_VGASTATE is not set
# CONFIG_VIDEO_OUTPUT_CONTROL is not set
# CONFIG_FB is not set
# CONFIG_EXYNOS_VIDEO is not set
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
# CONFIG_SOUND is not set
CONFIG_USB_ARCH_HAS_OHCI=y
# CONFIG_USB_ARCH_HAS_EHCI is not set
# CONFIG_USB_ARCH_HAS_XHCI is not set
# CONFIG_USB_SUPPORT is not set
CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
# CONFIG_MMC_UNSAFE_RESUME is not set
# CONFIG_MMC_CLKGATE is not set
#
# MMC/SD/SDIO Card Drivers
#
# CONFIG_SDIO_UART is not set
# CONFIG_MMC_TEST is not set
#
# MMC/SD/SDIO Host Controller Drivers
#
# CONFIG_MMC_ARMMMCI is not set
# CONFIG_MMC_SDHCI is not set
# CONFIG_MMC_SDHCI_PXAV3 is not set
# CONFIG_MMC_SDHCI_PXAV2 is not set
# CONFIG_MMC_DW is not set
# CONFIG_MEMSTICK is not set
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y
#
# LED drivers
#
# CONFIG_LEDS_LM3530 is not set
CONFIG_LEDS_GPIO=y
# CONFIG_LEDS_LP3944 is not set
# CONFIG_LEDS_LP5521 is not set
# CONFIG_LEDS_LP5523 is not set
# CONFIG_LEDS_PCA955X is not set
# CONFIG_LEDS_PCA9633 is not set
# CONFIG_LEDS_DAC124S085 is not set
# CONFIG_LEDS_REGULATOR is not set
# CONFIG_LEDS_BD2802 is not set
# CONFIG_LEDS_LT3593 is not set
# CONFIG_LEDS_RENESAS_TPU is not set
# CONFIG_LEDS_TCA6507 is not set
# CONFIG_LEDS_OT200 is not set
CONFIG_LEDS_TRIGGERS=y
#
# LED Triggers
#
CONFIG_LEDS_TRIGGER_TIMER=y
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
CONFIG_LEDS_TRIGGER_BACKLIGHT=y
CONFIG_LEDS_TRIGGER_GPIO=y
CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
#
# iptables trigger is under Netfilter config (LED target)
#
# CONFIG_ACCESSIBILITY is not set
CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
# CONFIG_RTC_DEBUG is not set
#
# RTC interfaces
#
CONFIG_RTC_INTF_SYSFS=y
CONFIG_RTC_INTF_PROC=y
CONFIG_RTC_INTF_DEV=y
# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
# CONFIG_RTC_DRV_TEST is not set
#
# I2C RTC drivers
#
# CONFIG_RTC_DRV_DS1307 is not set
# CONFIG_RTC_DRV_DS1374 is not set
# CONFIG_RTC_DRV_DS1672 is not set
# CONFIG_RTC_DRV_DS3232 is not set
# CONFIG_RTC_DRV_MAX6900 is not set
# CONFIG_RTC_DRV_RS5C372 is not set
# CONFIG_RTC_DRV_ISL1208 is not set
# CONFIG_RTC_DRV_ISL12022 is not set
# CONFIG_RTC_DRV_X1205 is not set
# CONFIG_RTC_DRV_PCF8563 is not set
# CONFIG_RTC_DRV_PCF8583 is not set
# CONFIG_RTC_DRV_M41T80 is not set
# CONFIG_RTC_DRV_BQ32K is not set
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_FM3130 is not set
# CONFIG_RTC_DRV_RX8581 is not set
# CONFIG_RTC_DRV_RX8025 is not set
# CONFIG_RTC_DRV_EM3027 is not set
# CONFIG_RTC_DRV_RV3029C2 is not set
#
# SPI RTC drivers
#
# CONFIG_RTC_DRV_M41T93 is not set
# CONFIG_RTC_DRV_M41T94 is not set
# CONFIG_RTC_DRV_DS1305 is not set
# CONFIG_RTC_DRV_DS1390 is not set
# CONFIG_RTC_DRV_MAX6902 is not set
# CONFIG_RTC_DRV_R9701 is not set
# CONFIG_RTC_DRV_RS5C348 is not set
# CONFIG_RTC_DRV_DS3234 is not set
CONFIG_RTC_DRV_PCF2123=y
#
# Platform RTC drivers
#
# CONFIG_RTC_DRV_CMOS is not set
# CONFIG_RTC_DRV_DS1286 is not set
# CONFIG_RTC_DRV_DS1511 is not set
# CONFIG_RTC_DRV_DS1553 is not set
# CONFIG_RTC_DRV_DS1742 is not set
# CONFIG_RTC_DRV_STK17TA8 is not set
# CONFIG_RTC_DRV_M48T86 is not set
# CONFIG_RTC_DRV_M48T35 is not set
# CONFIG_RTC_DRV_M48T59 is not set
# CONFIG_RTC_DRV_MSM6242 is not set
# CONFIG_RTC_DRV_BQ4802 is not set
# CONFIG_RTC_DRV_RP5C01 is not set
# CONFIG_RTC_DRV_V3020 is not set
#
# on-CPU RTC drivers
#
# CONFIG_RTC_DRV_PL030 is not set
# CONFIG_RTC_DRV_PL031 is not set
# CONFIG_RTC_DRV_LPC32XX is not set
CONFIG_DMADEVICES=y
# CONFIG_DMADEVICES_DEBUG is not set
#
# DMA Devices
#
# CONFIG_AMBA_PL08X is not set
# CONFIG_DW_DMAC is not set
# CONFIG_TIMB_DMA is not set
# CONFIG_PL330_DMA is not set
# CONFIG_AUXDISPLAY is not set
# CONFIG_UIO is not set
#
# Virtio drivers
#
# CONFIG_VIRTIO_BALLOON is not set
# CONFIG_VIRTIO_MMIO is not set
#
# Microsoft Hyper-V guest support
#
CONFIG_STAGING=y
# CONFIG_ECHO is not set
CONFIG_IIO=y
# CONFIG_IIO_ST_HWMON is not set
# CONFIG_IIO_BUFFER is not set
CONFIG_IIO_TRIGGER=y
CONFIG_IIO_CONSUMERS_PER_TRIGGER=2
#
# Accelerometers
#
# CONFIG_ADIS16201 is not set
# CONFIG_ADIS16203 is not set
# CONFIG_ADIS16204 is not set
# CONFIG_ADIS16209 is not set
# CONFIG_ADIS16220 is not set
# CONFIG_ADIS16240 is not set
# CONFIG_KXSD9 is not set
# CONFIG_LIS3L02DQ is not set
#
# Analog to digital converters
#
# CONFIG_AD7291 is not set
# CONFIG_AD7298 is not set
# CONFIG_AD7606 is not set
# CONFIG_AD799X is not set
# CONFIG_AD7476 is not set
# CONFIG_AD7887 is not set
# CONFIG_AD7780 is not set
# CONFIG_AD7793 is not set
# CONFIG_AD7816 is not set
# CONFIG_AD7192 is not set
# CONFIG_ADT7310 is not set
# CONFIG_ADT7410 is not set
# CONFIG_AD7280 is not set
# CONFIG_MAX1363 is not set
# CONFIG_LPC32XX_ADC is not set
#
# Analog digital bi-direction converters
#
# CONFIG_ADT7316 is not set
#
# Capacitance to digital converters
#
# CONFIG_AD7150 is not set
# CONFIG_AD7152 is not set
# CONFIG_AD7746 is not set
#
# Digital to analog converters
#
# CONFIG_AD5064 is not set
# CONFIG_AD5360 is not set
# CONFIG_AD5380 is not set
# CONFIG_AD5421 is not set
# CONFIG_AD5624R_SPI is not set
# CONFIG_AD5446 is not set
# CONFIG_AD5504 is not set
# CONFIG_AD5764 is not set
# CONFIG_AD5791 is not set
# CONFIG_AD5686 is not set
# CONFIG_MAX517 is not set
#
# Direct Digital Synthesis
#
# CONFIG_AD5930 is not set
# CONFIG_AD9832 is not set
# CONFIG_AD9834 is not set
# CONFIG_AD9850 is not set
# CONFIG_AD9852 is not set
# CONFIG_AD9910 is not set
# CONFIG_AD9951 is not set
#
# Digital gyroscope sensors
#
# CONFIG_ADIS16060 is not set
# CONFIG_ADIS16080 is not set
# CONFIG_ADIS16130 is not set
# CONFIG_ADIS16260 is not set
# CONFIG_ADXRS450 is not set
#
# Network Analyzer, Impedance Converters
#
# CONFIG_AD5933 is not set
#
# Inertial measurement units
#
# CONFIG_ADIS16400 is not set
#
# Light sensors
#
CONFIG_SENSORS_ISL29018=y
# CONFIG_SENSORS_TSL2563 is not set
# CONFIG_TSL2583 is not set
#
# Magnetometer sensors
#
# CONFIG_SENSORS_AK8975 is not set
# CONFIG_SENSORS_HMC5843 is not set
#
# Active energy metering IC
#
# CONFIG_ADE7753 is not set
# CONFIG_ADE7754 is not set
# CONFIG_ADE7758 is not set
# CONFIG_ADE7759 is not set
# CONFIG_ADE7854 is not set
#
# Resolver to digital converters
#
# CONFIG_AD2S90 is not set
# CONFIG_AD2S1200 is not set
# CONFIG_AD2S1210 is not set
#
# Triggers - standalone
#
# CONFIG_IIO_PERIODIC_RTC_TRIGGER is not set
# CONFIG_IIO_GPIO_TRIGGER is not set
# CONFIG_IIO_SYSFS_TRIGGER is not set
# CONFIG_IIO_SIMPLE_DUMMY is not set
# CONFIG_FT1000 is not set
#
# Speakup console speech
#
# CONFIG_STAGING_MEDIA is not set
#
# Android
#
# CONFIG_ANDROID is not set
# CONFIG_PHONE is not set
CONFIG_CLKDEV_LOOKUP=y
#
# Hardware Spinlock drivers
#
CONFIG_CLKSRC_MMIO=y
CONFIG_IOMMU_SUPPORT=y
#
# Remoteproc drivers (EXPERIMENTAL)
#
#
# Rpmsg drivers (EXPERIMENTAL)
#
# CONFIG_VIRT_DRIVERS is not set
# CONFIG_PM_DEVFREQ is not set
#
# File systems
#
CONFIG_FS_POSIX_ACL=y
CONFIG_EXPORTFS=y
CONFIG_FILE_LOCKING=y
CONFIG_FSNOTIFY=y
CONFIG_DNOTIFY=y
CONFIG_INOTIFY_USER=y
CONFIG_FANOTIFY=y
# CONFIG_QUOTA is not set
# CONFIG_QUOTACTL is not set
CONFIG_AUTOFS4_FS=y
CONFIG_FUSE_FS=y
CONFIG_CUSE=y
CONFIG_GENERIC_ACL=y
#
# Caches
#
# CONFIG_FSCACHE is not set
#
# Pseudo filesystems
#
CONFIG_PROC_FS=y
CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
CONFIG_TMPFS_POSIX_ACL=y
CONFIG_TMPFS_XATTR=y
# CONFIG_HUGETLB_PAGE is not set
CONFIG_CONFIGFS_FS=y
CONFIG_MISC_FILESYSTEMS=y
# CONFIG_ECRYPT_FS is not set
CONFIG_JFFS2_FS=y
CONFIG_JFFS2_FS_DEBUG=0
CONFIG_JFFS2_FS_WRITEBUFFER=y
# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
# CONFIG_JFFS2_SUMMARY is not set
# CONFIG_JFFS2_FS_XATTR is not set
# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
CONFIG_JFFS2_ZLIB=y
# CONFIG_JFFS2_LZO is not set
CONFIG_JFFS2_RTIME=y
# CONFIG_JFFS2_RUBIN is not set
CONFIG_UBIFS_FS=y
CONFIG_UBIFS_FS_XATTR=y
CONFIG_UBIFS_FS_ADVANCED_COMPR=y
CONFIG_UBIFS_FS_LZO=y
CONFIG_UBIFS_FS_ZLIB=y
# CONFIG_UBIFS_FS_DEBUG is not set
# CONFIG_LOGFS is not set
# CONFIG_ROMFS_FS is not set
# CONFIG_PSTORE is not set
# CONFIG_NETWORK_FILESYSTEMS is not set
# CONFIG_NLS is not set
# CONFIG_DLM is not set
#
# Kernel hacking
#
CONFIG_PRINTK_TIME=y
CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4
CONFIG_ENABLE_WARN_DEPRECATED=y
CONFIG_ENABLE_MUST_CHECK=y
CONFIG_FRAME_WARN=1024
CONFIG_MAGIC_SYSRQ=y
# CONFIG_STRIP_ASM_SYMS is not set
# CONFIG_UNUSED_SYMBOLS is not set
# CONFIG_DEBUG_FS is not set
# CONFIG_HEADERS_CHECK is not set
# CONFIG_DEBUG_SECTION_MISMATCH is not set
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_SHIRQ is not set
# CONFIG_LOCKUP_DETECTOR is not set
# CONFIG_HARDLOCKUP_DETECTOR is not set
# CONFIG_DETECT_HUNG_TASK is not set
# CONFIG_SCHED_DEBUG is not set
# CONFIG_SCHEDSTATS is not set
# CONFIG_TIMER_STATS is not set
# CONFIG_DEBUG_OBJECTS is not set
# CONFIG_SLUB_DEBUG_ON is not set
# CONFIG_SLUB_STATS is not set
# CONFIG_DEBUG_KMEMLEAK is not set
# CONFIG_DEBUG_PREEMPT is not set
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
# CONFIG_DEBUG_MUTEXES is not set
# CONFIG_DEBUG_LOCK_ALLOC is not set
# CONFIG_PROVE_LOCKING is not set
# CONFIG_SPARSE_RCU_POINTER is not set
# CONFIG_LOCK_STAT is not set
# CONFIG_DEBUG_ATOMIC_SLEEP is not set
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
# CONFIG_DEBUG_STACK_USAGE is not set
# CONFIG_DEBUG_KOBJECT is not set
# CONFIG_DEBUG_HIGHMEM is not set
CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_DEBUG_INFO=y
# CONFIG_DEBUG_INFO_REDUCED is not set
# CONFIG_DEBUG_VM is not set
# CONFIG_DEBUG_WRITECOUNT is not set
# CONFIG_DEBUG_MEMORY_INIT is not set
CONFIG_DEBUG_LIST=y
# CONFIG_TEST_LIST_SORT is not set
# CONFIG_DEBUG_SG is not set
# CONFIG_DEBUG_NOTIFIERS is not set
# CONFIG_DEBUG_CREDENTIALS is not set
# CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_RCU_TORTURE_TEST is not set
CONFIG_RCU_TRACE=y
# CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
# CONFIG_FAULT_INJECTION is not set
# CONFIG_LATENCYTOP is not set
# CONFIG_DEBUG_PAGEALLOC is not set
CONFIG_HAVE_FUNCTION_TRACER=y
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
CONFIG_HAVE_C_RECORDMCOUNT=y
CONFIG_TRACING_SUPPORT=y
# CONFIG_FTRACE is not set
# CONFIG_DMA_API_DEBUG is not set
# CONFIG_ATOMIC64_SELFTEST is not set
# CONFIG_SAMPLES is not set
CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_KGDB is not set
# CONFIG_TEST_KSTRTOX is not set
# CONFIG_STRICT_DEVMEM is not set
CONFIG_ARM_UNWIND=y
CONFIG_DEBUG_USER=y
CONFIG_DEBUG_LL=y
CONFIG_DEBUG_LL_UART_NONE=y
# CONFIG_DEBUG_ICEDCC is not set
# CONFIG_DEBUG_SEMIHOSTING is not set
CONFIG_EARLY_PRINTK=y
# CONFIG_OC_ETM is not set
#
# Security options
#
CONFIG_KEYS=y
# CONFIG_ENCRYPTED_KEYS is not set
# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
# CONFIG_SECURITY_DMESG_RESTRICT is not set
# CONFIG_SECURITY is not set
# CONFIG_SECURITYFS is not set
CONFIG_DEFAULT_SECURITY_DAC=y
CONFIG_DEFAULT_SECURITY=""
CONFIG_CRYPTO=y
#
# Crypto core or helper
#
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_ALGAPI2=y
CONFIG_CRYPTO_AEAD2=y
CONFIG_CRYPTO_BLKCIPHER2=y
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_HASH2=y
CONFIG_CRYPTO_RNG2=y
CONFIG_CRYPTO_PCOMP2=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_MANAGER2=y
# CONFIG_CRYPTO_USER is not set
# CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set
CONFIG_CRYPTO_GF128MUL=y
# CONFIG_CRYPTO_NULL is not set
CONFIG_CRYPTO_WORKQUEUE=y
# CONFIG_CRYPTO_CRYPTD is not set
# CONFIG_CRYPTO_AUTHENC is not set
# CONFIG_CRYPTO_TEST is not set
#
# Authenticated Encryption with Associated Data
#
# CONFIG_CRYPTO_CCM is not set
# CONFIG_CRYPTO_GCM is not set
# CONFIG_CRYPTO_SEQIV is not set
#
# Block modes
#
# CONFIG_CRYPTO_CBC is not set
# CONFIG_CRYPTO_CTR is not set
# CONFIG_CRYPTO_CTS is not set
# CONFIG_CRYPTO_ECB is not set
# CONFIG_CRYPTO_LRW is not set
# CONFIG_CRYPTO_PCBC is not set
# CONFIG_CRYPTO_XTS is not set
#
# Hash modes
#
# CONFIG_CRYPTO_HMAC is not set
# CONFIG_CRYPTO_XCBC is not set
# CONFIG_CRYPTO_VMAC is not set
#
# Digest
#
CONFIG_CRYPTO_CRC32C=y
# CONFIG_CRYPTO_GHASH is not set
# CONFIG_CRYPTO_MD4 is not set
# CONFIG_CRYPTO_MD5 is not set
# CONFIG_CRYPTO_MICHAEL_MIC is not set
# CONFIG_CRYPTO_RMD128 is not set
# CONFIG_CRYPTO_RMD160 is not set
# CONFIG_CRYPTO_RMD256 is not set
# CONFIG_CRYPTO_RMD320 is not set
CONFIG_CRYPTO_SHA1=y
# CONFIG_CRYPTO_SHA256 is not set
# CONFIG_CRYPTO_SHA512 is not set
# CONFIG_CRYPTO_TGR192 is not set
# CONFIG_CRYPTO_WP512 is not set
#
# Ciphers
#
CONFIG_CRYPTO_AES=y
# CONFIG_CRYPTO_ANUBIS is not set
# CONFIG_CRYPTO_ARC4 is not set
# CONFIG_CRYPTO_BLOWFISH is not set
# CONFIG_CRYPTO_CAMELLIA is not set
# CONFIG_CRYPTO_CAST5 is not set
# CONFIG_CRYPTO_CAST6 is not set
# CONFIG_CRYPTO_DES is not set
# CONFIG_CRYPTO_FCRYPT is not set
# CONFIG_CRYPTO_KHAZAD is not set
# CONFIG_CRYPTO_SALSA20 is not set
# CONFIG_CRYPTO_SEED is not set
# CONFIG_CRYPTO_SERPENT is not set
# CONFIG_CRYPTO_TEA is not set
# CONFIG_CRYPTO_TWOFISH is not set
#
# Compression
#
CONFIG_CRYPTO_DEFLATE=y
# CONFIG_CRYPTO_ZLIB is not set
CONFIG_CRYPTO_LZO=y
#
# Random Number Generation
#
# CONFIG_CRYPTO_ANSI_CPRNG is not set
# CONFIG_CRYPTO_USER_API_HASH is not set
# CONFIG_CRYPTO_USER_API_SKCIPHER is not set
# CONFIG_CRYPTO_HW is not set
# CONFIG_BINARY_PRINTF is not set
#
# Library routines
#
CONFIG_BITREVERSE=y
CONFIG_GENERIC_PCI_IOMAP=y
CONFIG_GENERIC_IO=y
# CONFIG_CRC_CCITT is not set
CONFIG_CRC16=y
# CONFIG_CRC_T10DIF is not set
CONFIG_CRC_ITU_T=y
CONFIG_CRC32=y
# CONFIG_CRC32_SELFTEST is not set
CONFIG_CRC32_SLICEBY8=y
# CONFIG_CRC32_SLICEBY4 is not set
# CONFIG_CRC32_SARWATE is not set
# CONFIG_CRC32_BIT is not set
# CONFIG_CRC7 is not set
CONFIG_LIBCRC32C=y
# CONFIG_CRC8 is not set
CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=y
CONFIG_LZO_COMPRESS=y
CONFIG_LZO_DECOMPRESS=y
CONFIG_XZ_DEC=y
# CONFIG_XZ_DEC_X86 is not set
# CONFIG_XZ_DEC_POWERPC is not set
# CONFIG_XZ_DEC_IA64 is not set
# CONFIG_XZ_DEC_ARM is not set
# CONFIG_XZ_DEC_ARMTHUMB is not set
# CONFIG_XZ_DEC_SPARC is not set
# CONFIG_XZ_DEC_BCJ is not set
# CONFIG_XZ_DEC_TEST is not set
CONFIG_DECOMPRESS_GZIP=y
CONFIG_DECOMPRESS_BZIP2=y
CONFIG_DECOMPRESS_LZMA=y
CONFIG_DECOMPRESS_XZ=y
CONFIG_DECOMPRESS_LZO=y
CONFIG_BCH=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
CONFIG_HAS_DMA=y
CONFIG_DQL=y
CONFIG_NLATTR=y
CONFIG_GENERIC_ATOMIC64=y
# CONFIG_AVERAGE is not set
# CONFIG_CORDIC is not set
Processor : ARM926EJ-S rev 4 (v5l)
BogoMIPS : 97.17
Features : swp half thumb fastmult vfp edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant : 0x0
CPU part : 0x926
CPU revision : 4
Hardware : m-u-t 3250 board with the LPC3250 Microcontroller
Revision : 0000
Serial : 0000000000000000
08000000-0801ffff : lpc-eth.0
31060000-31060fff : lpc-eth.0
40088000-4008801f : serial
40090000-4009001f : serial
80000000-83ffffff : System RAM
80008000-80318cb3 : Kernel code
80338000-80390df7 : Kernel data
Linux version 3.4.113 (buildroot@buildroot) (gcc version 4.9.4 (Buildroot 2018.02.1) ) #1 PREEMPT Mon Apr 9 23:40:00 CEST 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment