[prev in list] [next in list] [prev in thread] [next in thread] 

List:       busybox
Subject:    Re: [RESEND] Re: [PATCH] udhcpd: Handle auto_time timeout overflow
From:       Tim Hentenaar <tim () hentenaar ! com>
Date:       2015-01-27 15:47:41
Message-ID: 20150127154741.GE5419 () gmail ! com
[Download RAW message or body]

[Attachment #2 (multipart/signed)]

[Attachment #4 (multipart/mixed)]


On Tue, Jan 27, 2015 at 02:13:38PM +0100, Denys Vlasenko wrote:
> On Tue, Jan 27, 2015 at 1:28 PM, Tim Hentenaar <tim@hentenaar.com> wrote:
> > call    monotonic_sec   #
> > movl    24(%rsp), %ecx  # %sfp, D.9844
> > movl    52+bb_common_bufsiz1(%rip), %r14d       # MEM[(struct server_config_t * \
> > {ref-all})&bb_common_bufsiz1].auto_time, movq    $0, 88(%rsp)    #, tv.tv_usec
> > subl    %eax, %ecx      # D.9836, D.9844
> > testl   %r14d, %r14d    #
> > movq    %rcx, 80(%rsp)  # D.9844, tv.tv_sec
> > je      .L88    #,
> > testq   %rcx, %rcx      # D.9844
> > je      .L179   #,
> > leaq    80(%rsp), %r8   #, iftmp.12
> > jmp     .L87    #
> > 
> > Are you using a 32-bit x86 arch? If not, what do you get if you compile
> > it in 64-bit mode?
> 
> With gcc 4.7.2:
> 
> call    udhcp_sp_fd_set #
> cmpl    $0, bb_common_bufsiz1+52(%rip)  #, MEM[(struct
> server_config_t * {ref-all})&bb_common_bufsiz1].auto_time
> movl    %eax, %ebx      #, max_sock
> je      .L71    #,
> call    monotonic_sec   #
> movl    24(%rsp), %edx  # %sfp,
> movq    $0, 56(%rsp)    #, tv.tv_usec
> subl    %eax, %edx      # D.8343,
> movl    %edx, %eax      #,
> movq    %rax, 48(%rsp)  #, tv.tv_sec
> .L71:
> xorl    %r8d, %r8d      # iftmp.11
> cmpl    $0, bb_common_bufsiz1+52(%rip)  #, MEM[(struct
> server_config_t * {ref-all})&bb_common_bufsiz1].auto_time
> je      .L72    #,
> cmpq    $0, 48(%rsp)    #, tv.tv_sec
> jg      .L110   #,
> jmp     .L166   #
> .L110:
> leaq    48(%rsp), %r8   #, iftmp.11
> .L72:
> leal    1(%rbx), %edi   #, tmp216
> leaq    104(%rsp), %rsi #,
> xorl    %ecx, %ecx      #
> xorl    %edx, %edx      #
> call    select  #

With gcc 4.7.4:

    call    monotonic_sec   #
    movl    16(%rsp), %edx  # %sfp,
    movl    52+bb_common_bufsiz1(%rip), %r13d   # MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].auto_time,  movq    $0, 72(%rsp)    #, tv.tv_usec
    subl    %eax, %edx  # D.8069,
    testl   %r13d, %r13d    #
    movq    %rdx, 64(%rsp)  # D.8071, tv.tv_sec
    je  .L100   #,
    testq   %rdx, %rdx  # D.8071
    je  .L196   #,
    leaq    64(%rsp), %r8   #, iftmp.13
    jmp .L99    #

With gcc 4.9.2:

    call    monotonic_sec   #
    movl    -948(%rbp), %edx    # %sfp, D.8524
    movl    52+bb_common_bufsiz1(%rip), %r15d   # MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].auto_time,  movq    $0, -872(%rbp)  #, tv.tv_usec
    subl    %eax, %edx  # D.8513, D.8524
    testl   %r15d, %r15d    #
    movq    %rdx, -880(%rbp)    # D.8524, tv.tv_sec
    je  .L98    #,
    testq   %rdx, %rdx  # D.8524
    je  .L190   #,
    leaq    -880(%rbp), %r8 #, D.8510
    jmp .L97    #

Basically identical to what I got initially. I also double-checked that
the file was freshly regenerated each time. I'm at a loss to explain
gcc's choice of opcode in this case. I could be missing something,
though. I've attached the full .s file.

Here's the md5sum of the source file I'm using (from git rev.
9de69c024c7c47f3f8733dbc7c9522966fcd73a9), in case there's any
difference:

6497bc6e9038ad587e557a8ee59214d2  networking/udhcp/dhcpd.c

Tim


["dhcpd.s" (text/x-asm)]

	.file	"dhcpd.c"
# GNU C (Gentoo Hardened 4.7.4 p1.2, pie-0.5.5) version 4.7.4 \
(x86_64-gentoo-linux-uclibc) #	compiled by GNU C version 4.7.4, GMP version 5.1.3, \
MPFR version 3.1.2, MPC version 1.0.1 # GGC heuristics: --param ggc-min-expand=30 \
--param ggc-min-heapsize=4096 # options passed:  -I include -I libbb -D _GNU_SOURCE \
-D NDEBUG # -D _LARGEFILE_SOURCE -D _LARGEFILE64_SOURCE -D _FILE_OFFSET_BITS=64
# -D BB_VER=KBUILD_STR(1.23.0) -D BB_BT=AUTOCONF_TIMESTAMP
# -D KBUILD_STR(s)=#s -D KBUILD_BASENAME=KBUILD_STR(dhcpd)
# -D KBUILD_MODNAME=KBUILD_STR(dhcpd) -include include/autoconf.h
# -MD networking/udhcp/.dhcpd.s.d networking/udhcp/dhcpd.c
# -fno-strict-overflow -mtune=generic -march=x86-64
# -auxbase-strip networking/udhcp/dhcpd.s -Os -O2 -Wall -Wshadow
# -Wwrite-strings -Wundef -Wstrict-prototypes -Wunused -Wunused-parameter
# -Wunused-function -Wunused-value -Wmissing-prototypes
# -Wmissing-declarations -Wno-format-security -Wdeclaration-after-statement
# -Wold-style-definition -std=gnu99 -fno-builtin-strlen -finline-limit=0
# -fomit-frame-pointer -ffunction-sections -fdata-sections
# -fno-guess-branch-probability -funsigned-char -falign-functions=1
# -falign-jumps=1 -falign-labels=1 -falign-loops=1 -fno-unwind-tables
# -fno-asynchronous-unwind-tables -fpie -fPIE -fverbose-asm
# -fstack-protector-all
# options enabled:  -fPIC -fPIE -fauto-inc-dec -fbranch-count-reg
# -fcaller-saves -fcombine-stack-adjustments -fcommon -fcompare-elim
# -fcprop-registers -fcrossjumping -fcse-follow-jumps -fdata-sections
# -fdebug-types-section -fdefer-pop -fdelete-null-pointer-checks
# -fdevirtualize -fdwarf2-cfi-asm -fearly-inlining
# -feliminate-unused-debug-types -fexpensive-optimizations
# -fforward-propagate -ffunction-cse -ffunction-sections -fgcse -fgcse-lm
# -fgnu-runtime -fident -fif-conversion -fif-conversion2
# -findirect-inlining -finline -finline-atomics
# -finline-functions-called-once -finline-small-functions -fipa-cp
# -fipa-profile -fipa-pure-const -fipa-reference -fipa-sra
# -fira-share-save-slots -fira-share-spill-slots -fivopts
# -fkeep-static-consts -fleading-underscore -fmath-errno -fmerge-constants
# -fmerge-debug-strings -fmove-loop-invariants -fomit-frame-pointer
# -foptimize-register-move -foptimize-sibling-calls -foptimize-strlen
# -fpartial-inlining -fpeephole -fpeephole2 -fprefetch-loop-arrays -free
# -freg-struct-return -fregmove -freorder-blocks -freorder-functions
# -frerun-cse-after-loop -fsched-critical-path-heuristic
# -fsched-dep-count-heuristic -fsched-group-heuristic -fsched-interblock
# -fsched-last-insn-heuristic -fsched-rank-heuristic -fsched-spec
# -fsched-spec-insn-heuristic -fsched-stalled-insns-dep -fschedule-insns2
# -fshow-column -fshrink-wrap -fsigned-zeros -fsplit-ivs-in-unroller
# -fsplit-wide-types -fstack-protector-all -fstrict-aliasing
# -fstrict-volatile-bitfields -fthread-jumps -ftoplevel-reorder
# -ftrapping-math -ftree-bit-ccp -ftree-builtin-call-dce -ftree-ccp
# -ftree-ch -ftree-copy-prop -ftree-copyrename -ftree-cselim -ftree-dce
# -ftree-dominator-opts -ftree-dse -ftree-forwprop -ftree-fre
# -ftree-loop-if-convert -ftree-loop-im -ftree-loop-ivcanon
# -ftree-loop-optimize -ftree-parallelize-loops= -ftree-phiprop -ftree-pre
# -ftree-pta -ftree-reassoc -ftree-scev-cprop -ftree-sink
# -ftree-slp-vectorize -ftree-sra -ftree-switch-conversion
# -ftree-tail-merge -ftree-ter -ftree-vect-loop-version -ftree-vrp
# -funit-at-a-time -fvect-cost-model -fverbose-asm
# -fzero-initialized-in-bss -m128bit-long-double -m64 -m80387
# -maccumulate-outgoing-args -malign-stringops -mfancy-math-387
# -mfp-ret-in-387 -mieee-fp -mmmx -mno-sse4 -mpush-args -mred-zone -msse
# -msse2 -mtls-direct-seg-refs -muclibc

	.section	.text.select_lease_time,"ax",@progbits
	.type	select_lease_time, @function
select_lease_time:
	pushq	%rbx	#
	movl	$51, %esi	#,
	subq	$16, %rsp	#,
	movl	40+bb_common_bufsiz1(%rip), %ebx	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].max_lease_sec, lease_time_sec  movq	%fs:40, %rax	#,
	movq	%rax, 8(%rsp)	#, D.8389
	xorl	%eax, %eax	#
	call	udhcp_get_option	#
	testq	%rax, %rax	# lease_time_opt
	je	.L2	#,
	movl	40+bb_common_bufsiz1(%rip), %edx	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].max_lease_sec, lease_time_sec  movl	(%rax), %eax	# \
MEM[(bb__aliased_uint32_t * {ref-all})lease_time_opt_7], __v #APP
# 138 "networking/udhcp/dhcpd.c" 1
	bswap %eax	# __v
# 0 "" 2
#NO_APP
	cmpl	%edx, %eax	# lease_time_sec, __v
	cmova	%edx, %eax	# __v,, lease_time_sec, lease_time_sec
	movl	44+bb_common_bufsiz1(%rip), %edx	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].min_lease_sec, lease_time_sec  cmpl	%edx, %eax	# \
lease_time_sec, lease_time_sec  movl	%edx, %ebx	# lease_time_sec, lease_time_sec
	cmovae	%eax, %ebx	# lease_time_sec,, lease_time_sec
.L2:
	movq	8(%rsp), %rdx	# D.8389,
	xorq	%fs:40, %rdx	#,
	movl	%ebx, %eax	# lease_time_sec,
	jne	.L9	#,
	addq	$16, %rsp	#,
	popq	%rbx	#
	ret
.L9:
	call	__stack_chk_fail@PLT	#
	.size	select_lease_time, .-select_lease_time
	.section	.text.init_packet,"ax",@progbits
	.type	init_packet, @function
init_packet:
	pushq	%rbp	#
	movq	%rsi, %rbp	# oldpacket, oldpacket
	movl	%edx, %esi	# type, type
	pushq	%rbx	#
	movq	%rdi, %rbx	# packet, packet
	subq	$24, %rsp	#,
	movq	%fs:40, %rax	#,
	movq	%rax, 8(%rsp)	#, D.8395
	xorl	%eax, %eax	#
	call	udhcp_init_header	#
	movl	4(%rbp), %eax	# oldpacket_4(D)->xid, D.8255
	movl	%eax, 4(%rbx)	# D.8255, packet_3(D)->xid
	movq	28(%rbp), %rax	# oldpacket_4(D)->chaddr, oldpacket_4(D)->chaddr
	movq	%rax, 28(%rbx)	# oldpacket_4(D)->chaddr, packet_3(D)->chaddr
	movq	36(%rbp), %rax	# oldpacket_4(D)->chaddr, oldpacket_4(D)->chaddr
	movq	%rax, 36(%rbx)	# oldpacket_4(D)->chaddr, packet_3(D)->chaddr
	movzwl	10(%rbp), %eax	# oldpacket_4(D)->flags, D.8258
	movw	%ax, 10(%rbx)	# D.8258, packet_3(D)->flags
	movl	24(%rbp), %eax	# oldpacket_4(D)->gateway_nip, D.8259
	movl	%eax, 24(%rbx)	# D.8259, packet_3(D)->gateway_nip
	movl	12(%rbp), %eax	# oldpacket_4(D)->ciaddr, D.8260
	movl	%eax, 12(%rbx)	# D.8260, packet_3(D)->ciaddr
	movq	8(%rsp), %rax	# D.8395,
	xorq	%fs:40, %rax	#,
	jne	.L14	#,
	movl	12+bb_common_bufsiz1(%rip), %edx	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].server_nip,  addq	$24, %rsp	#,
	movq	%rbx, %rdi	# packet,
	popq	%rbx	#
	popq	%rbp	#
	movl	$54, %esi	#,
	jmp	udhcp_add_simple_option	#
.L14:
	call	__stack_chk_fail@PLT	#
	.size	init_packet, .-init_packet
	.section	.text.add_server_options,"ax",@progbits
	.type	add_server_options, @function
add_server_options:
	pushq	%rbp	#
	movq	%rdi, %rbp	# packet, packet
	pushq	%rbx	#
	subq	$24, %rsp	#,
	movq	24+bb_common_bufsiz1(%rip), %rbx	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].options, curr  movq	%fs:40, %rax	#,
	movq	%rax, 8(%rsp)	#, D.8400
	xorl	%eax, %eax	#
	testq	%rbx, %rbx	# curr
	je	.L21	#,
.L25:
	movq	(%rbx), %rsi	# curr_32->data, D.8287
	cmpb	$51, (%rsi)	#, *D.8287_4
	je	.L19	#,
	movq	%rbp, %rdi	# packet,
	call	udhcp_add_binary_option	#
.L19:
	movq	8(%rbx), %rbx	# curr_32->next, curr
	testq	%rbx, %rbx	# curr
	jne	.L25	#,
.L21:
	movl	68+bb_common_bufsiz1(%rip), %eax	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].siaddr_nip, D.8291  movl	%eax, 20(%rbp)	# D.8291, \
packet_7(D)->siaddr_nip  movq	96+bb_common_bufsiz1(%rip), %rsi	# MEM[(struct \
server_config_t * {ref-all})&bb_common_bufsiz1].sname, D.8292  testq	%rsi, %rsi	# \
D.8292  je	.L18	#,
	leaq	44(%rbp), %rdi	#, tmp74
	movl	$63, %edx	#,
	call	strncpy@PLT	#
.L18:
	movq	104+bb_common_bufsiz1(%rip), %rsi	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].boot_file, D.8296  testq	%rsi, %rsi	# D.8296
	je	.L15	#,
	movq	8(%rsp), %rax	# D.8400,
	xorq	%fs:40, %rax	#,
	jne	.L28	#,
	addq	$24, %rsp	#,
	leaq	108(%rbp), %rdi	#, tmp77
	movl	$127, %edx	#,
	popq	%rbx	#
	popq	%rbp	#
	jmp	strncpy@PLT	#
.L15:
	movq	8(%rsp), %rax	# D.8400,
	xorq	%fs:40, %rax	#,
	jne	.L28	#,
	addq	$24, %rsp	#,
	popq	%rbx	#
	popq	%rbp	#
	ret
.L28:
	call	__stack_chk_fail@PLT	#
	.size	add_server_options, .-add_server_options
	.section	.rodata.str1.1,"aMS",@progbits,1
.LC0:
	.string	"Forwarding packet to relay"
.LC1:
	.string	"Broadcasting packet to client"
	.section	.rodata.str1.8,"aMS",@progbits,1
	.align 8
.LC2:
	.string	"Unicasting packet to client ciaddr"
	.section	.text.send_packet,"ax",@progbits
	.type	send_packet, @function
send_packet:
	pushq	%r12	#
	pushq	%rbp	#
	pushq	%rbx	#
	movq	%rdi, %rbx	# dhcp_pkt, dhcp_pkt
	subq	$32, %rsp	#,
	movl	24(%rdi), %ecx	# dhcp_pkt_1(D)->gateway_nip, prephitmp.56
	movq	%fs:40, %rax	#,
	movq	%rax, 24(%rsp)	#, D.8427
	xorl	%eax, %eax	#
	testl	%ecx, %ecx	# prephitmp.56
	je	.L30	#,
	movl	dhcp_verbose(%rip), %esi	# dhcp_verbose,
	testl	%esi, %esi	#
	je	.L31	#,
	leaq	.LC0(%rip), %rdi	#,
	call	bb_info_msg	#
	movl	24(%rbx), %ecx	# dhcp_pkt_1(D)->gateway_nip, prephitmp.56
.L31:
	movq	24(%rsp), %rax	# D.8427,
	xorq	%fs:40, %rax	#,
	movzwl	16+bb_common_bufsiz1(%rip), %edx	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].port, D.8404  jne	.L40	#,
	movl	12+bb_common_bufsiz1(%rip), %esi	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].server_nip,  addq	$32, %rsp	#,
	movq	%rbx, %rdi	# dhcp_pkt,
	popq	%rbx	#
	popq	%rbp	#
	popq	%r12	#
	movl	%edx, %r8d	# D.8404,
	jmp	udhcp_send_kernel_packet	#
.L30:
	testl	%esi, %esi	# force_broadcast
	je	.L41	#,
.L33:
	movl	dhcp_verbose(%rip), %edx	# dhcp_verbose,
	movl	$-1, %ebp	#, ciaddr
	leaq	MAC_BCAST_ADDR(%rip), %r12	#, chaddr
	testl	%edx, %edx	#
	je	.L35	#,
	leaq	.LC1(%rip), %rdi	#,
	xorl	%eax, %eax	#
	call	bb_info_msg	#
.L35:
	movl	8+bb_common_bufsiz1(%rip), %eax	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].ifindex, MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].ifindex  movzwl	2054+bb_common_bufsiz1(%rip), %r8d	# \
MEM[(struct client_config_t * {ref-all})&bb_common_bufsiz1 + 2048B].port, MEM[(struct \
client_config_t * {ref-all})&bb_common_bufsiz1 + 2048B].port  movq	%r12, %r9	# \
chaddr,  movzwl	16+bb_common_bufsiz1(%rip), %edx	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].port, MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].port  movl	12+bb_common_bufsiz1(%rip), %esi	# \
MEM[(struct server_config_t * {ref-all})&bb_common_bufsiz1].server_nip,  movl	%ebp, \
%ecx	# ciaddr,  movq	%rbx, %rdi	# dhcp_pkt,
	movl	%eax, (%rsp)	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].ifindex,  call	udhcp_send_raw_packet	#
	movq	24(%rsp), %rax	# D.8427,
	xorq	%fs:40, %rax	#,
	jne	.L40	#,
	addq	$32, %rsp	#,
	popq	%rbx	#
	popq	%rbp	#
	popq	%r12	#
	ret
.L40:
	call	__stack_chk_fail@PLT	#
.L41:
	testb	$-128, 10(%rdi)	#, dhcp_pkt_1(D)->flags
	jne	.L33	#,
	movl	12(%rdi), %ebp	# dhcp_pkt_1(D)->ciaddr, ciaddr
	testl	%ebp, %ebp	# ciaddr
	je	.L33	#,
	movl	dhcp_verbose(%rip), %eax	# dhcp_verbose,
	testl	%eax, %eax	#
	je	.L36	#,
	leaq	.LC2(%rip), %rdi	#,
	xorl	%eax, %eax	#
	call	bb_info_msg	#
	movl	12(%rbx), %ebp	# dhcp_pkt_1(D)->ciaddr, ciaddr
.L36:
	leaq	28(%rbx), %r12	#, chaddr
	jmp	.L35	#
	.size	send_packet, .-send_packet
	.section	.rodata.str1.8
	.align 8
.LC3:
	.string	"no free IP addresses. OFFER abandoned"
	.section	.rodata.str1.1
.LC4:
	.string	"Sending OFFER of %s"
	.section	.text.send_offer,"ax",@progbits
	.type	send_offer, @function
send_offer:
	pushq	%r14	#
	movq	%rcx, %r14	# requested_ip_opt, requested_ip_opt
	pushq	%r13	#
	movl	%r8d, %r13d	# arpping_ms, arpping_ms
	pushq	%r12	#
	movl	%esi, %r12d	# static_lease_nip, static_lease_nip
	movq	%rdi, %rsi	# oldpacket,
	pushq	%rbp	#
	movq	%rdi, %rbp	# oldpacket, oldpacket
	pushq	%rbx	#
	movq	%rdx, %rbx	# lease, lease
	movl	$2, %edx	#,
	subq	$640, %rsp	#,
	movq	%rsp, %rdi	#,
	movq	%fs:40, %rax	#,
	movq	%rax, 632(%rsp)	#, D.8434
	xorl	%eax, %eax	#
	call	init_packet	#
	testl	%r12d, %r12d	# static_lease_nip
	movl	%r12d, 16(%rsp)	# static_lease_nip, packet.yiaddr
	je	.L66	#,
.L65:
	movq	%rbp, %rdi	# oldpacket,
	call	select_lease_time	#
	movl	$51, %esi	#,
	movq	%rsp, %rdi	#,
	movl	%eax, %edx	# lease_time_sec, __v
#APP
# 213 "networking/udhcp/dhcpd.c" 1
	bswap %edx	# __v
# 0 "" 2
#NO_APP
	call	udhcp_add_simple_option	#
	movq	%rsp, %rdi	#,
	call	add_server_options	#
	movl	16(%rsp), %edi	# packet.yiaddr,
	call	inet_ntoa@PLT	#
	leaq	.LC4(%rip), %rdi	#,
	movq	%rax, %rsi	# D.8250,
	xorl	%eax, %eax	#
	call	bb_info_msg	#
	xorl	%esi, %esi	#
	movq	%rsp, %rdi	#,
	call	send_packet	#
.L42:
	movq	632(%rsp), %rax	# D.8434,
	xorq	%fs:40, %rax	#,
	jne	.L67	#,
	addq	$640, %rsp	#,
	popq	%rbx	#
	popq	%rbp	#
	popq	%r12	#
	popq	%r13	#
	popq	%r14	#
	ret
.L66:
	testq	%rbx, %rbx	# lease
	je	.L44	#,
	movl	4(%rbx), %ebx	# lease_7(D)->lease_nip, req_nip
	movl	%ebx, 16(%rsp)	# req_nip, packet.yiaddr
.L45:
	testl	%ebx, %ebx	# req_nip
	jne	.L49	#,
.L52:
	leaq	.LC3(%rip), %rdi	#,
	xorl	%eax, %eax	#
	call	bb_error_msg	#
	jmp	.L42	#
.L44:
	testq	%r14, %r14	# requested_ip_opt
	jne	.L68	#,
.L46:
	leaq	28(%rbp), %rdi	#, tmp89
	movl	%r13d, %esi	# arpping_ms,
	call	find_free_or_expired_nip	#
	movl	%eax, %ebx	#, req_nip
.L64:
	movl	%ebx, 16(%rsp)	# req_nip, packet.yiaddr
	jmp	.L45	#
.L68:
	movl	(%r14), %ebx	# MEM[(bb__aliased_uint32_t * {ref-all})requested_ip_opt_9(D)], \
req_nip  movl	%ebx, %eax	# req_nip, __v
#APP
# 181 "networking/udhcp/dhcpd.c" 1
	bswap %eax	# __v
# 0 "" 2
#NO_APP
	cmpl	32+bb_common_bufsiz1(%rip), %eax	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].start_ip, __v  jb	.L46	#,
	cmpl	36+bb_common_bufsiz1(%rip), %eax	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].end_ip, __v  ja	.L46	#,
	movl	%ebx, %edi	# req_nip,
	call	find_lease_by_nip	#
	testq	%rax, %rax	# lease
	je	.L64	#,
	movq	%rax, %rdi	# lease,
	call	is_expired_lease	#
	testl	%eax, %eax	# D.8223
	jne	.L64	#,
	.p2align 4,,3
	jmp	.L46	#
.L67:
	.p2align 4,,9
	call	__stack_chk_fail@PLT	#
.L49:
	movl	$12, %esi	#,
	movq	%rbp, %rdi	# oldpacket,
	call	udhcp_get_option	#
	xorl	%r8d, %r8d	# iftmp.19
	testq	%rax, %rax	# p_host_name
	je	.L51	#,
	movzbl	-1(%rax), %r8d	# MEM[(const char *)p_host_name_51 + -1B], iftmp.19
.L51:
	movl	64+bb_common_bufsiz1(%rip), %edx	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].offer_time,  movl	16(%rsp), %esi	# packet.yiaddr,
	leaq	28(%rsp), %rdi	#, tmp93
	movq	%rax, %rcx	# p_host_name,
	call	add_lease	#
	testq	%rax, %rax	# lease
	je	.L52	#,
	jmp	.L65	#
	.size	send_offer, .-send_offer
	.section	.rodata.str1.1
.LC5:
	.string	"Sending ACK to %s"
	.section	.text.send_ACK,"ax",@progbits
	.type	send_ACK, @function
send_ACK:
	pushq	%r12	#
	movl	$5, %edx	#,
	pushq	%rbp	#
	movl	%esi, %ebp	# yiaddr, yiaddr
	movq	%rdi, %rsi	# oldpacket,
	pushq	%rbx	#
	movq	%rdi, %rbx	# oldpacket, oldpacket
	subq	$640, %rsp	#,
	movq	%rsp, %rdi	#,
	movq	%fs:40, %rax	#,
	movq	%rax, 632(%rsp)	#, D.8442
	xorl	%eax, %eax	#
	call	init_packet	#
	movq	%rbx, %rdi	# oldpacket,
	movl	%ebp, 16(%rsp)	# yiaddr, packet.yiaddr
	call	select_lease_time	#
	movl	$51, %esi	#,
	movq	%rsp, %rdi	#,
	movl	%eax, %edx	# lease_time_sec, __v
	movl	%eax, %r12d	#, lease_time_sec
#APP
# 245 "networking/udhcp/dhcpd.c" 1
	bswap %edx	# __v
# 0 "" 2
#NO_APP
	call	udhcp_add_simple_option	#
	movq	%rsp, %rdi	#,
	call	add_server_options	#
	movl	%ebp, %edi	# yiaddr,
	call	inet_ntoa@PLT	#
	leaq	.LC5(%rip), %rdi	#,
	movq	%rax, %rsi	# D.8350,
	xorl	%eax, %eax	#
	call	bb_info_msg	#
	xorl	%esi, %esi	#
	movq	%rsp, %rdi	#,
	call	send_packet	#
	movl	$12, %esi	#,
	movq	%rbx, %rdi	# oldpacket,
	call	udhcp_get_option	#
	xorl	%r8d, %r8d	# iftmp.32
	testq	%rax, %rax	# p_host_name
	movq	%rax, %rcx	#, p_host_name
	je	.L70	#,
	movzbl	-1(%rax), %r8d	# MEM[(const char *)p_host_name_22 + -1B], iftmp.32
.L70:
	movl	16(%rsp), %esi	# packet.yiaddr,
	leaq	28(%rsp), %rdi	#, tmp77
	movl	%r12d, %edx	# lease_time_sec,
	call	add_lease	#
	call	write_leases	#
	movq	632(%rsp), %rax	# D.8442,
	xorq	%fs:40, %rax	#,
	jne	.L75	#,
	addq	$640, %rsp	#,
	popq	%rbx	#
	popq	%rbp	#
	popq	%r12	#
	ret
.L75:
	call	__stack_chk_fail@PLT	#
	.size	send_ACK, .-send_ACK
	.section	.rodata.str1.1
.LC6:
	.string	"Sending NAK"
	.section	.text.send_NAK,"ax",@progbits
	.type	send_NAK, @function
send_NAK:
	subq	$648, %rsp	#,
	movq	%rdi, %rsi	# oldpacket, oldpacket
	movl	$6, %edx	#,
	movq	%rsp, %rdi	#,
	movq	%fs:40, %rax	#,
	movq	%rax, 632(%rsp)	#, D.8447
	xorl	%eax, %eax	#
	call	init_packet	#
	movl	dhcp_verbose(%rip), %eax	# dhcp_verbose,
	testl	%eax, %eax	#
	je	.L77	#,
	leaq	.LC6(%rip), %rdi	#,
	xorl	%eax, %eax	#
	call	bb_info_msg	#
.L77:
	movl	$1, %esi	#,
	movq	%rsp, %rdi	#,
	call	send_packet	#
	movq	632(%rsp), %rax	# D.8447,
	xorq	%fs:40, %rax	#,
	jne	.L80	#,
	addq	$648, %rsp	#,
	ret
.L80:
	call	__stack_chk_fail@PLT	#
	.size	send_NAK, .-send_NAK
	.section	.text.send_inform,"ax",@progbits
	.type	send_inform, @function
send_inform:
	subq	$648, %rsp	#,
	movq	%rdi, %rsi	# oldpacket, oldpacket
	movl	$5, %edx	#,
	movq	%rsp, %rdi	#,
	movq	%fs:40, %rax	#,
	movq	%rax, 632(%rsp)	#, D.8451
	xorl	%eax, %eax	#
	call	init_packet	#
	movq	%rsp, %rdi	#,
	call	add_server_options	#
	xorl	%esi, %esi	#
	movq	%rsp, %rdi	#,
	call	send_packet	#
	movq	632(%rsp), %rax	# D.8451,
	xorq	%fs:40, %rax	#,
	jne	.L84	#,
	addq	$648, %rsp	#,
	ret
.L84:
	call	__stack_chk_fail@PLT	#
	.size	send_inform, .-send_inform
	.section	.rodata.str1.1
.LC7:
	.string	"/etc/udhcpd.conf"
.LC8:
	.string	"2000"
.LC9:
	.string	"vv"
.LC10:
	.string	"fSI:va:P:"
.LC11:
	.string	"%s (v1.23.0) started"
	.section	.rodata.str1.8
	.align 8
.LC12:
	.string	"max_leases=%u is too big, setting to %u"
	.section	.rodata.str1.1
.LC13:
	.string	"Error on select"
.LC14:
	.string	"Received SIGUSR1"
.LC15:
	.string	"Received SIGTERM"
	.section	.rodata.str1.8
	.align 8
.LC16:
	.string	"Read error: %s, reopening socket"
	.align 8
.LC17:
	.string	"MAC length != 6, ignoring packet"
	.align 8
.LC18:
	.string	"not a REQUEST, ignoring packet"
	.align 8
.LC19:
	.string	"no or bad message type option, ignoring packet"
	.align 8
.LC20:
	.string	"server ID doesn't match, ignoring"
	.section	.rodata.str1.1
.LC21:
	.string	"Found static lease: %x"
.LC22:
	.string	"Received DISCOVER"
.LC23:
	.string	"Received REQUEST"
	.section	.rodata.str1.8
	.align 8
.LC24:
	.string	"no requested IP and no ciaddr, ignoring"
	.section	.rodata.str1.1
.LC25:
	.string	"Received DECLINE"
.LC26:
	.string	"Received RELEASE"
.LC27:
	.string	"Received INFORM"
	.section	.text.udhcpd_main,"ax",@progbits
	.globl	udhcpd_main
	.type	udhcpd_main, @function
udhcpd_main:
	pushq	%r15	#
	leaq	.LC8(%rip), %rdx	#,
	leaq	dhcp_verbose(%rip), %r9	#,
	pushq	%r14	#
	pushq	%r13	#
	pushq	%r12	#
	pushq	%rbp	#
	movq	%rsi, %rbp	# argv, argv
	leaq	.LC10(%rip), %rsi	#,
	movq	%rbp, %rdi	# argv,
	pushq	%rbx	#
	subq	$904, %rsp	#,
	movw	$67, 16+bb_common_bufsiz1(%rip)	#, MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].port  movw	$68, 2054+bb_common_bufsiz1(%rip)	#, \
MEM[(struct client_config_t * {ref-all})&bb_common_bufsiz1 + 2048B].port  \
movq	%fs:40, %rax	#,  movq	%rax, 888(%rsp)	#, D.8469
	xorl	%eax, %eax	#
	leaq	.LC9(%rip), %rax	#,
	movq	%rdx, 48(%rsp)	#, str_a
	leaq	56(%rsp), %r8	#,
	leaq	48(%rsp), %rcx	#,
	leaq	40(%rsp), %rdx	#,
	movq	%rax, opt_complementary(%rip)	#, opt_complementary
	xorl	%eax, %eax	#
	call	getopt32	#
	testb	$1, %al	#, opt
	movl	%eax, %ebx	#, opt
	jne	.L86	#,
	xorl	%edi, %edi	#
	call	bb_daemonize_or_rexec	#
	movb	$0, logmode(%rip)	#, logmode
.L86:
	movq	optind@GOTPCREL(%rip), %rax	#, tmp186
	testb	$2, %bl	#, opt
	movslq	(%rax), %rax	# optind, optind
	leaq	0(%rbp,%rax,8), %rbp	#, argv
	je	.L87	#,
	movq	applet_name(%rip), %rdi	# applet_name,
	movl	$24, %edx	#,
	movl	$1, %esi	#,
	call	openlog@PLT	#
	orb	$2, logmode(%rip)	#, logmode
.L87:
	testb	$4, %bl	#, opt
	je	.L88	#,
	movq	40(%rsp), %rdi	# str_I,
	xorl	%esi, %esi	#
	call	xhost2sockaddr	#
	movl	8(%rax), %edx	# lsa_35->u.sin.sin_addr.s_addr, lsa_35->u.sin.sin_addr.s_addr
	movq	%rax, %rdi	# tmp194,
	movl	%edx, 12+bb_common_bufsiz1(%rip)	# lsa_35->u.sin.sin_addr.s_addr, MEM[(struct \
server_config_t * {ref-all})&bb_common_bufsiz1].server_nip  call	free@PLT	#
.L88:
	andl	$32, %ebx	#, opt
	je	.L89	#,
	movq	56(%rsp), %rdi	# str_P,
	call	xatou16	#
	movw	%ax, 16+bb_common_bufsiz1(%rip)	# D.8015, MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].port  addl	$1, %eax	#, tmp201
	movw	%ax, 2054+bb_common_bufsiz1(%rip)	# tmp201, MEM[(struct client_config_t * \
                {ref-all})&bb_common_bufsiz1 + 2048B].port
.L89:
	movq	48(%rsp), %rdi	# str_a,
	call	xatou	#
	movq	0(%rbp), %rdi	# *argv_28, iftmp.8
	movl	%eax, 20(%rsp)	#, %sfp
	leaq	.LC7(%rip), %rax	#, tmp287
	testq	%rdi, %rdi	# iftmp.8
	cmove	%rax, %rdi	# iftmp.8,, tmp287, iftmp.8
	call	read_config	#
	call	bb_sanitize_stdio	#
	movq	stdout@GOTPCREL(%rip), %rax	#, tmp203
	movq	(%rax), %rdi	# stdout,
	call	setlinebuf@PLT	#
	movq	applet_name(%rip), %rsi	# applet_name,
	leaq	.LC11(%rip), %rdi	#,
	xorl	%eax, %eax	#
	call	bb_info_msg	#
	movq	24+bb_common_bufsiz1(%rip), %rdi	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].options,  movl	$51, %esi	#,
	call	udhcp_find_option	#
	testq	%rax, %rax	# option
	movl	$864000, 40+bb_common_bufsiz1(%rip)	#, MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].max_lease_sec  je	.L91	#,
	movq	(%rax), %rax	# option_55->data, option_55->data
	movl	2(%rax), %eax	# MEM[(bb__aliased_uint32_t * {ref-all})D.8028_58 + 2B], __v
#APP
# 370 "networking/udhcp/dhcpd.c" 1
	bswap %eax	# __v
# 0 "" 2
#NO_APP
	movl	%eax, 40+bb_common_bufsiz1(%rip)	# __v, MEM[(struct server_config_t * \
                {ref-all})&bb_common_bufsiz1].max_lease_sec
.L91:
	movl	36+bb_common_bufsiz1(%rip), %ebx	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].end_ip, num_ips  movl	48+bb_common_bufsiz1(%rip), \
%esi	# MEM[(struct server_config_t * {ref-all})&bb_common_bufsiz1].max_leases,  \
addl	$1, %ebx	#, num_ips  subl	32+bb_common_bufsiz1(%rip), %ebx	# MEM[(struct \
server_config_t * {ref-all})&bb_common_bufsiz1].start_ip, num_ips  cmpl	%esi, %ebx	# \
num_ips, num_ips  jae	.L92	#,
	leaq	.LC12(%rip), %rdi	#,
	movl	%ebx, %edx	# num_ips,
	xorl	%eax, %eax	#
	call	bb_error_msg	#
	movl	%ebx, 48+bb_common_bufsiz1(%rip)	# num_ips, MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].max_leases  movl	%ebx, %esi	# num_ips,
.L92:
	leaq	(%rsi,%rsi,8), %rdi	#, tmp220
	salq	$2, %rdi	#, tmp221
	call	xzalloc	#
	movq	72+bb_common_bufsiz1(%rip), %rdi	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].lease_file,  movq	%rax, g_leases(%rip)	# tmp222, \
g_leases  call	read_leases	#
	movl	12+bb_common_bufsiz1(%rip), %r15d	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].server_nip,  leaq	12+bb_common_bufsiz1(%rip), %rax	#, \
tmp288  movq	bb_common_bufsiz1(%rip), %rdi	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].interface,  xorl	%edx, %edx	# iftmp.12
	leaq	18+bb_common_bufsiz1(%rip), %rcx	#,
	leaq	8+bb_common_bufsiz1(%rip), %rsi	#,
	testl	%r15d, %r15d	#
	cmove	%rax, %rdx	# tmp288,, iftmp.12
	call	udhcp_read_interface	#
	testl	%eax, %eax	# D.8059
	movl	$1, %edx	#, retval
	je	.L197	#,
.L94:
	movl	%edx, %eax	# retval,
	movq	888(%rsp), %rdx	# D.8469,
	xorq	%fs:40, %rdx	#,
	jne	.L198	#,
	addq	$904, %rsp	#,
	popq	%rbx	#
	popq	%rbp	#
	popq	%r12	#
	popq	%r13	#
	popq	%r14	#
	popq	%r15	#
	ret
.L197:
	call	udhcp_sp_setup	#
	movq	bb_errno(%rip), %rax	# bb_errno,
	leaq	284(%rsp), %rdx	#,
	movl	$-1, %ebp	#, server_socket
	movq	%rdx, 8(%rsp)	#, %sfp
	movq	%rax, 24(%rsp)	#, %sfp
.L193:
	call	monotonic_sec	#
	movl	52+bb_common_bufsiz1(%rip), %edx	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].auto_time,  addl	%edx, %eax	#,
	movl	%eax, 16(%rsp)	#, %sfp
.L192:
	testl	%ebp, %ebp	# server_socket
	jns	.L97	#,
.L194:
	movzwl	16+bb_common_bufsiz1(%rip), %edi	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].port, MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].port  movq	bb_common_bufsiz1(%rip), %rsi	# MEM[(struct \
server_config_t * {ref-all})&bb_common_bufsiz1].interface,  \
call	udhcp_listen_socket	#  movl	%eax, %ebp	#, server_socket
.L97:
	leaq	128(%rsp), %rdi	#,
	movl	%ebp, %esi	# server_socket,
	call	udhcp_sp_fd_set	#
	movl	52+bb_common_bufsiz1(%rip), %r14d	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].auto_time,  movl	%eax, %ebx	#, max_sock
	testl	%r14d, %r14d	#
	jne	.L98	#,
.L100:
	xorl	%r8d, %r8d	# iftmp.13
.L99:
	leal	1(%rbx), %edi	#, tmp236
	leaq	128(%rsp), %rsi	#,
	xorl	%ecx, %ecx	#
	xorl	%edx, %edx	#
	call	select@PLT	#
	cmpl	$0, %eax	#, retval
	jne	.L199	#,
.L196:
.L95:
	call	write_leases	#
	.p2align 4,,5
	jmp	.L193	#
.L198:
	.p2align 4,,8
	call	__stack_chk_fail@PLT	#
.L98:
	.p2align 4,,8
	call	monotonic_sec	#
	movl	16(%rsp), %edx	# %sfp,
	movl	52+bb_common_bufsiz1(%rip), %r13d	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].auto_time,  movq	$0, 72(%rsp)	#, tv.tv_usec
	subl	%eax, %edx	# D.8069,
	testl	%r13d, %r13d	#
	movq	%rdx, 64(%rsp)	# D.8071, tv.tv_sec
	je	.L100	#,
	testq	%rdx, %rdx	# D.8071
	je	.L196	#,
	leaq	64(%rsp), %r8	#, iftmp.13
	jmp	.L99	#
.L199:
	.p2align 4,,3
	jge	.L103	#,
	movq	24(%rsp), %rax	# %sfp,
	cmpl	$4, (%rax)	#, *bb_errno.14_132
	je	.L103	#,
	movl	dhcp_verbose(%rip), %r11d	# dhcp_verbose,
	testl	%r11d, %r11d	#
	je	.L192	#,
	leaq	.LC13(%rip), %rdi	#,
	xorl	%eax, %eax	#
	call	bb_info_msg	#
	jmp	.L192	#
.L103:
	leaq	128(%rsp), %rdi	#,
	call	udhcp_sp_read	#
	cmpl	$10, %eax	#, D.8092
	jne	.L200	#,
	leaq	.LC14(%rip), %rdi	#,
	xorl	%eax, %eax	#
	call	bb_info_msg	#
	jmp	.L196	#
.L200:
	cmpl	$15, %eax	#, D.8092
	jne	.L201	#,
	leaq	.LC15(%rip), %rdi	#,
	xorl	%eax, %eax	#
	call	bb_info_msg	#
	call	write_leases	#
	xorl	%edx, %edx	# retval
	jmp	.L94	#
.L201:
	testl	%eax, %eax	# D.8092
	.p2align 4,,4
	jne	.L192	#,
	leaq	256(%rsp), %rdi	#,
	movl	%ebp, %esi	# server_socket,
	call	udhcp_recv_kernel_packet	#
	testl	%eax, %eax	# bytes
	jns	.L108	#,
	cmpl	$-1, %eax	#, bytes
	jne	.L192	#,
	movq	bb_errno(%rip), %rdx	# bb_errno,
	movl	(%rdx), %edi	# *bb_errno.14_138, D.8086
	cmpl	$4, %edi	#, D.8086
	je	.L192	#,
	movl	dhcp_verbose(%rip), %r10d	# dhcp_verbose,
	testl	%r10d, %r10d	#
	je	.L109	#,
	call	strerror@PLT	#
	leaq	.LC16(%rip), %rdi	#,
	movq	%rax, %rsi	# D.8101,
	xorl	%eax, %eax	#
	call	bb_info_msg	#
.L109:
	movl	%ebp, %edi	# server_socket,
	call	close@PLT	#
	jmp	.L194	#
.L108:
	cmpb	$6, 258(%rsp)	#, packet.hlen
	je	.L110	#,
	leaq	.LC17(%rip), %rdi	#,
	xorl	%eax, %eax	#
	call	bb_error_msg	#
	jmp	.L192	#
.L110:
	cmpb	$1, 256(%rsp)	#, packet.op
	je	.L111	#,
	leaq	.LC18(%rip), %rdi	#,
	xorl	%eax, %eax	#
	call	bb_error_msg	#
	jmp	.L192	#
.L111:
	leaq	256(%rsp), %rdi	#,
	movl	$53, %esi	#,
	call	udhcp_get_option	#
	testq	%rax, %rax	# state
	movq	%rax, %r15	#, state
	jne	.L202	#,
.L112:
	leaq	.LC19(%rip), %rdi	#,
	xorl	%eax, %eax	#
	call	bb_error_msg	#
	jmp	.L192	#
.L202:
	movzbl	(%rax), %eax	# *state_147, D.8111
	testb	%al, %al	# D.8111
	je	.L112	#,
	cmpb	$8, %al	#, D.8111
	.p2align 4,,4
	ja	.L112	#,
	leaq	256(%rsp), %rdi	#,
	movl	$54, %esi	#,
	call	udhcp_get_option	#
	testq	%rax, %rax	# server_id_opt
	movq	%rax, %r13	#, server_id_opt
	je	.L114	#,
	movl	(%rax), %eax	# MEM[(bb__aliased_uint32_t * {ref-all})server_id_opt_150],
	cmpl	%eax, 12+bb_common_bufsiz1(%rip)	#, MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].server_nip  je	.L114	#,
	movl	dhcp_verbose(%rip), %r9d	# dhcp_verbose,
	testl	%r9d, %r9d	#
	je	.L192	#,
	leaq	.LC20(%rip), %rdi	#,
	xorl	%eax, %eax	#
	call	bb_info_msg	#
	jmp	.L192	#
.L114:
	movq	8(%rsp), %rsi	# %sfp,
	movq	112+bb_common_bufsiz1(%rip), %rdi	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].static_leases,  call	get_static_nip_by_mac	#
	testl	%eax, %eax	#
	movl	%eax, 4(%rsp)	#, %sfp
	je	.L115	#,
	leaq	.LC21(%rip), %rdi	#,
	movl	%eax, %esi	#,
	xorl	%eax, %eax	#
	leaq	80(%rsp), %rbx	#, lease
	call	bb_info_msg	#
	movl	284(%rsp), %eax	# MEM[(char * {ref-all})&packet + 28B], MEM[(char * \
{ref-all})&packet + 28B]  movl	$0, 80(%rsp)	#, fake_lease.expires
	movl	%eax, 88(%rsp)	# MEM[(char * {ref-all})&packet + 28B], MEM[(char * \
{ref-all})&fake_lease + 8B]  movzwl	288(%rsp), %eax	# MEM[(char * {ref-all})&packet + \
28B], MEM[(char * {ref-all})&packet + 28B]  movw	%ax, 92(%rsp)	# MEM[(char * \
{ref-all})&packet + 28B], MEM[(char * {ref-all})&fake_lease + 8B]  movl	4(%rsp), \
%eax	# %sfp,  movl	%eax, 84(%rsp)	#, fake_lease.lease_nip
.L116:
	leaq	256(%rsp), %rdi	#,
	movl	$50, %esi	#,
	call	udhcp_get_option	#
	testq	%rax, %rax	# requested_ip_opt
	movq	%rax, %r14	#, requested_ip_opt
	je	.L117	#,
	movl	(%rax), %r12d	# MEM[(bb__aliased_uint32_t * {ref-all})requested_ip_opt_160], \
                requested_nip
.L117:
	cmpb	$8, (%r15)	#, *state_147
	ja	.L192	#,
	movzbl	(%r15), %edx	# *state_147, *state_147
	leaq	.L124(%rip), %rax	#, tmp254
	movslq	(%rax,%rdx,4), %rdx	#, tmp256
	addq	%rdx, %rax	# tmp256, tmp257
	jmp	*%rax	# tmp257
	.section	.rodata.udhcpd_main,"a",@progbits
	.align 4
	.align 4
.L124:
	.long	.L192-.L124
	.long	.L119-.L124
	.long	.L192-.L124
	.long	.L120-.L124
	.long	.L121-.L124
	.long	.L192-.L124
	.long	.L192-.L124
	.long	.L122-.L124
	.long	.L123-.L124
	.section	.text.udhcpd_main
.L115:
	movq	8(%rsp), %rdi	# %sfp,
	call	find_lease_by_mac	#
	movq	%rax, %rbx	#, lease
	jmp	.L116	#
.L119:
	movl	dhcp_verbose(%rip), %r8d	# dhcp_verbose,
	testl	%r8d, %r8d	#
	je	.L125	#,
	leaq	.LC22(%rip), %rdi	#,
	xorl	%eax, %eax	#
	call	bb_info_msg	#
.L125:
	movl	20(%rsp), %r8d	# %sfp,
	movl	4(%rsp), %esi	# %sfp,
	leaq	256(%rsp), %rdi	#,
	movq	%r14, %rcx	# requested_ip_opt,
	movq	%rbx, %rdx	# lease,
	call	send_offer	#
	jmp	.L192	#
.L123:
	movl	dhcp_verbose(%rip), %eax	# dhcp_verbose,
	testl	%eax, %eax	#
	je	.L132	#,
	leaq	.LC27(%rip), %rdi	#,
	xorl	%eax, %eax	#
	call	bb_info_msg	#
.L132:
	leaq	256(%rsp), %rdi	#,
	call	send_inform	#
	jmp	.L192	#
.L122:
	movl	dhcp_verbose(%rip), %edx	# dhcp_verbose,
	testl	%edx, %edx	#
	je	.L131	#,
	leaq	.LC26(%rip), %rdi	#,
	xorl	%eax, %eax	#
	call	bb_info_msg	#
.L131:
	testq	%rbx, %rbx	# lease
	je	.L192	#,
	testq	%r13, %r13	# server_id_opt
	je	.L192	#,
	movl	4(%rbx), %edx	# lease_14->lease_nip,
	cmpl	%edx, 268(%rsp)	#, packet.ciaddr
	jne	.L192	#,
	xorl	%edi, %edi	#
	call	time@PLT	#
	movl	%eax, (%rbx)	# D.8169, lease_14->expires
	jmp	.L192	#
.L121:
	movl	dhcp_verbose(%rip), %ecx	# dhcp_verbose,
	testl	%ecx, %ecx	#
	je	.L130	#,
	leaq	.LC25(%rip), %rdi	#,
	xorl	%eax, %eax	#
	call	bb_info_msg	#
.L130:
	testq	%r14, %r14	# requested_ip_opt
	je	.L192	#,
	testq	%r13, %r13	# server_id_opt
	je	.L192	#,
	testq	%rbx, %rbx	# lease
	.p2align 4,,2
	je	.L192	#,
	cmpl	%r12d, 4(%rbx)	# requested_nip, lease_14->lease_nip
	jne	.L192	#,
	movl	$0, 8(%rbx)	#, lease_14->lease_mac
	movw	$0, 12(%rbx)	#, lease_14->lease_mac
	xorl	%edi, %edi	#
	call	time@PLT	#
	addl	56+bb_common_bufsiz1(%rip), %eax	# MEM[(struct server_config_t * \
{ref-all})&bb_common_bufsiz1].decline_time, tmp273  movl	%eax, (%rbx)	# tmp273, \
lease_14->expires  jmp	.L192	#
.L120:
	movl	dhcp_verbose(%rip), %edi	# dhcp_verbose,
	testl	%edi, %edi	#
	je	.L126	#,
	leaq	.LC23(%rip), %rdi	#,
	xorl	%eax, %eax	#
	call	bb_info_msg	#
.L126:
	testq	%r14, %r14	# requested_ip_opt
	jne	.L127	#,
	movl	268(%rsp), %r12d	# packet.ciaddr, requested_nip
	testl	%r12d, %r12d	# requested_nip
	jne	.L127	#,
	movl	dhcp_verbose(%rip), %esi	# dhcp_verbose,
	testl	%esi, %esi	#
	je	.L192	#,
	leaq	.LC24(%rip), %rdi	#,
	xorl	%eax, %eax	#
	call	bb_info_msg	#
	jmp	.L192	#
.L127:
	testq	%rbx, %rbx	# lease
	je	.L128	#,
	cmpl	%r12d, 4(%rbx)	# requested_nip, lease_14->lease_nip
	.p2align 4,,4
	jne	.L128	#,
	leaq	256(%rsp), %rdi	#,
	movl	%r12d, %esi	# requested_nip,
	call	send_ACK	#
	jmp	.L192	#
.L128:
	testq	%r14, %r14	# requested_ip_opt
	je	.L203	#,
.L138:
	leaq	256(%rsp), %rdi	#,
	call	send_NAK	#
	jmp	.L192	#
.L203:
	testq	%r13, %r13	# server_id_opt
	je	.L192	#,
	.p2align 4,,8
	jmp	.L138	#
	.size	udhcpd_main, .-udhcpd_main
	.hidden	g_leases
	.comm	g_leases,8,8
	.hidden	find_lease_by_mac
	.hidden	get_static_nip_by_mac
	.hidden	udhcp_recv_kernel_packet
	.hidden	udhcp_sp_read
	.hidden	udhcp_sp_fd_set
	.hidden	udhcp_listen_socket
	.hidden	monotonic_sec
	.hidden	bb_errno
	.hidden	udhcp_sp_setup
	.hidden	udhcp_read_interface
	.hidden	read_leases
	.hidden	xzalloc
	.hidden	udhcp_find_option
	.hidden	bb_sanitize_stdio
	.hidden	read_config
	.hidden	xatou
	.hidden	xatou16
	.hidden	xhost2sockaddr
	.hidden	applet_name
	.hidden	logmode
	.hidden	bb_daemonize_or_rexec
	.hidden	getopt32
	.hidden	opt_complementary
	.hidden	write_leases
	.hidden	add_lease
	.hidden	is_expired_lease
	.hidden	find_lease_by_nip
	.hidden	find_free_or_expired_nip
	.hidden	bb_error_msg
	.hidden	udhcp_send_raw_packet
	.hidden	udhcp_send_kernel_packet
	.hidden	bb_info_msg
	.hidden	dhcp_verbose
	.hidden	MAC_BCAST_ADDR
	.hidden	udhcp_add_binary_option
	.hidden	udhcp_add_simple_option
	.hidden	udhcp_init_header
	.hidden	udhcp_get_option
	.hidden	bb_common_bufsiz1
	.ident	"GCC: (Gentoo Hardened 4.7.4 p1.2, pie-0.5.5) 4.7.4"
	.section	.note.GNU-stack,"",@progbits


[Attachment #8 (application/pgp-signature)]

_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic