@@ -89,10 +89,10 @@ struct ieee802154_fcf_seq *ieee802154_validate_fc_seq(uint8_t *buf, uint8_t **p_
89
89
return fs ;
90
90
}
91
91
92
- static inline struct ieee802154_address_field *
93
- validate_addr ( uint8_t * buf , uint8_t * * p_buf , uint8_t * length ,
94
- enum ieee802154_addressing_mode mode ,
95
- bool pan_id_compression )
92
+ static inline bool validate_addr ( uint8_t * buf , uint8_t * * p_buf , uint8_t * length ,
93
+ enum ieee802154_addressing_mode mode ,
94
+ bool pan_id_compression ,
95
+ struct ieee802154_address_field * * addr )
96
96
{
97
97
uint8_t len = 0 ;
98
98
@@ -102,7 +102,8 @@ validate_addr(uint8_t *buf, uint8_t **p_buf, uint8_t *length,
102
102
buf , mode , pan_id_compression );
103
103
104
104
if (mode == IEEE802154_ADDR_MODE_NONE ) {
105
- return NULL ;
105
+ * addr = NULL ;
106
+ return true;
106
107
}
107
108
108
109
if (!pan_id_compression ) {
@@ -117,13 +118,15 @@ validate_addr(uint8_t *buf, uint8_t **p_buf, uint8_t *length,
117
118
}
118
119
119
120
if (len > * length ) {
120
- return NULL ;
121
+ return false ;
121
122
}
122
123
123
124
* p_buf += len ;
124
125
* length -= len ;
125
126
126
- return (struct ieee802154_address_field * )buf ;
127
+ * addr = (struct ieee802154_address_field * )buf ;
128
+
129
+ return true;
127
130
}
128
131
129
132
#ifdef CONFIG_NET_L2_IEEE802154_SECURITY
@@ -439,13 +442,15 @@ bool ieee802154_validate_frame(uint8_t *buf, uint8_t length,
439
442
return false;
440
443
}
441
444
442
- mpdu -> mhr .dst_addr = validate_addr (p_buf , & p_buf , & length ,
443
- mpdu -> mhr .fs -> fc .dst_addr_mode ,
444
- false);
445
-
446
- mpdu -> mhr .src_addr = validate_addr (p_buf , & p_buf , & length ,
447
- mpdu -> mhr .fs -> fc .src_addr_mode ,
448
- (mpdu -> mhr .fs -> fc .pan_id_comp ));
445
+ if (!validate_addr (p_buf , & p_buf , & length ,
446
+ mpdu -> mhr .fs -> fc .dst_addr_mode ,
447
+ false, & mpdu -> mhr .dst_addr ) ||
448
+ !validate_addr (p_buf , & p_buf , & length ,
449
+ mpdu -> mhr .fs -> fc .src_addr_mode ,
450
+ (mpdu -> mhr .fs -> fc .pan_id_comp ),
451
+ & mpdu -> mhr .src_addr )) {
452
+ return false;
453
+ }
449
454
450
455
#ifdef CONFIG_NET_L2_IEEE802154_SECURITY
451
456
if (mpdu -> mhr .fs -> fc .security_enabled ) {
0 commit comments