@@ -677,14 +677,16 @@ static int bind4_prog_load(const struct sock_addr_test *test)
677
677
uint8_t u4_addr8 [4 ];
678
678
uint16_t u4_addr16 [2 ];
679
679
uint32_t u4_addr32 ;
680
- } ip4 ;
680
+ } ip4 , port ;
681
681
struct sockaddr_in addr4_rw ;
682
682
683
683
if (inet_pton (AF_INET , SERV4_IP , (void * )& ip4 ) != 1 ) {
684
684
log_err ("Invalid IPv4: %s" , SERV4_IP );
685
685
return -1 ;
686
686
}
687
687
688
+ port .u4_addr32 = htons (SERV4_PORT );
689
+
688
690
if (mk_sockaddr (AF_INET , SERV4_REWRITE_IP , SERV4_REWRITE_PORT ,
689
691
(struct sockaddr * )& addr4_rw , sizeof (addr4_rw )) == -1 )
690
692
return -1 ;
@@ -696,49 +698,65 @@ static int bind4_prog_load(const struct sock_addr_test *test)
696
698
/* if (sk.family == AF_INET && */
697
699
BPF_LDX_MEM (BPF_W , BPF_REG_7 , BPF_REG_6 ,
698
700
offsetof(struct bpf_sock_addr , family )),
699
- BPF_JMP_IMM (BPF_JNE , BPF_REG_7 , AF_INET , 24 ),
701
+ BPF_JMP_IMM (BPF_JNE , BPF_REG_7 , AF_INET , 32 ),
700
702
701
703
/* (sk.type == SOCK_DGRAM || sk.type == SOCK_STREAM) && */
702
704
BPF_LDX_MEM (BPF_W , BPF_REG_7 , BPF_REG_6 ,
703
705
offsetof(struct bpf_sock_addr , type )),
704
706
BPF_JMP_IMM (BPF_JNE , BPF_REG_7 , SOCK_DGRAM , 1 ),
705
707
BPF_JMP_A (1 ),
706
- BPF_JMP_IMM (BPF_JNE , BPF_REG_7 , SOCK_STREAM , 20 ),
708
+ BPF_JMP_IMM (BPF_JNE , BPF_REG_7 , SOCK_STREAM , 28 ),
707
709
708
710
/* 1st_byte_of_user_ip4 == expected && */
709
711
BPF_LDX_MEM (BPF_B , BPF_REG_7 , BPF_REG_6 ,
710
712
offsetof(struct bpf_sock_addr , user_ip4 )),
711
- BPF_JMP_IMM (BPF_JNE , BPF_REG_7 , ip4 .u4_addr8 [0 ], 18 ),
713
+ BPF_JMP_IMM (BPF_JNE , BPF_REG_7 , ip4 .u4_addr8 [0 ], 26 ),
712
714
713
715
/* 2nd_byte_of_user_ip4 == expected && */
714
716
BPF_LDX_MEM (BPF_B , BPF_REG_7 , BPF_REG_6 ,
715
717
offsetof(struct bpf_sock_addr , user_ip4 ) + 1 ),
716
- BPF_JMP_IMM (BPF_JNE , BPF_REG_7 , ip4 .u4_addr8 [1 ], 16 ),
718
+ BPF_JMP_IMM (BPF_JNE , BPF_REG_7 , ip4 .u4_addr8 [1 ], 24 ),
717
719
718
720
/* 3rd_byte_of_user_ip4 == expected && */
719
721
BPF_LDX_MEM (BPF_B , BPF_REG_7 , BPF_REG_6 ,
720
722
offsetof(struct bpf_sock_addr , user_ip4 ) + 2 ),
721
- BPF_JMP_IMM (BPF_JNE , BPF_REG_7 , ip4 .u4_addr8 [2 ], 14 ),
723
+ BPF_JMP_IMM (BPF_JNE , BPF_REG_7 , ip4 .u4_addr8 [2 ], 22 ),
722
724
723
725
/* 4th_byte_of_user_ip4 == expected && */
724
726
BPF_LDX_MEM (BPF_B , BPF_REG_7 , BPF_REG_6 ,
725
727
offsetof(struct bpf_sock_addr , user_ip4 ) + 3 ),
726
- BPF_JMP_IMM (BPF_JNE , BPF_REG_7 , ip4 .u4_addr8 [3 ], 12 ),
728
+ BPF_JMP_IMM (BPF_JNE , BPF_REG_7 , ip4 .u4_addr8 [3 ], 20 ),
727
729
728
730
/* 1st_half_of_user_ip4 == expected && */
729
731
BPF_LDX_MEM (BPF_H , BPF_REG_7 , BPF_REG_6 ,
730
732
offsetof(struct bpf_sock_addr , user_ip4 )),
731
- BPF_JMP_IMM (BPF_JNE , BPF_REG_7 , ip4 .u4_addr16 [0 ], 10 ),
733
+ BPF_JMP_IMM (BPF_JNE , BPF_REG_7 , ip4 .u4_addr16 [0 ], 18 ),
732
734
733
735
/* 2nd_half_of_user_ip4 == expected && */
734
736
BPF_LDX_MEM (BPF_H , BPF_REG_7 , BPF_REG_6 ,
735
737
offsetof(struct bpf_sock_addr , user_ip4 ) + 2 ),
736
- BPF_JMP_IMM (BPF_JNE , BPF_REG_7 , ip4 .u4_addr16 [1 ], 8 ),
738
+ BPF_JMP_IMM (BPF_JNE , BPF_REG_7 , ip4 .u4_addr16 [1 ], 16 ),
737
739
738
- /* whole_user_ip4 == expected) { */
740
+ /* whole_user_ip4 == expected && */
739
741
BPF_LDX_MEM (BPF_W , BPF_REG_7 , BPF_REG_6 ,
740
742
offsetof(struct bpf_sock_addr , user_ip4 )),
741
743
BPF_LD_IMM64 (BPF_REG_8 , ip4 .u4_addr32 ), /* See [2]. */
744
+ BPF_JMP_REG (BPF_JNE , BPF_REG_7 , BPF_REG_8 , 12 ),
745
+
746
+ /* 1st_byte_of_user_port == expected && */
747
+ BPF_LDX_MEM (BPF_B , BPF_REG_7 , BPF_REG_6 ,
748
+ offsetof(struct bpf_sock_addr , user_port )),
749
+ BPF_JMP_IMM (BPF_JNE , BPF_REG_7 , port .u4_addr8 [0 ], 10 ),
750
+
751
+ /* 1st_half_of_user_port == expected && */
752
+ BPF_LDX_MEM (BPF_H , BPF_REG_7 , BPF_REG_6 ,
753
+ offsetof(struct bpf_sock_addr , user_port )),
754
+ BPF_JMP_IMM (BPF_JNE , BPF_REG_7 , port .u4_addr16 [0 ], 8 ),
755
+
756
+ /* user_port == expected) { */
757
+ BPF_LDX_MEM (BPF_W , BPF_REG_7 , BPF_REG_6 ,
758
+ offsetof(struct bpf_sock_addr , user_port )),
759
+ BPF_LD_IMM64 (BPF_REG_8 , port .u4_addr32 ), /* See [2]. */
742
760
BPF_JMP_REG (BPF_JNE , BPF_REG_7 , BPF_REG_8 , 4 ),
743
761
744
762
/* user_ip4 = addr4_rw.sin_addr */
0 commit comments