rose: Add length checks to CALL_REQUEST parsing
Define some constant offsets for CALL_REQUEST based on the description at <http://www.techfest.com/networking/wan/x25plp.htm> and the definition of ROSE as using 10-digit (5-byte) addresses. Use them consistently. Validate all implicit and explicit facilities lengths. Validate the address length byte rather than either trusting or assuming its value. Signed-off-by: Ben Hutchings <ben@decadent.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
be20250c13
commit
e0bccd315d
@@ -14,6 +14,12 @@
|
||||
|
||||
#define ROSE_MIN_LEN 3
|
||||
|
||||
#define ROSE_CALL_REQ_ADDR_LEN_OFF 3
|
||||
#define ROSE_CALL_REQ_ADDR_LEN_VAL 0xAA /* each address is 10 digits */
|
||||
#define ROSE_CALL_REQ_DEST_ADDR_OFF 4
|
||||
#define ROSE_CALL_REQ_SRC_ADDR_OFF 9
|
||||
#define ROSE_CALL_REQ_FACILITIES_OFF 14
|
||||
|
||||
#define ROSE_GFI 0x10
|
||||
#define ROSE_Q_BIT 0x80
|
||||
#define ROSE_D_BIT 0x40
|
||||
@@ -214,7 +220,7 @@ extern void rose_requeue_frames(struct sock *);
|
||||
extern int rose_validate_nr(struct sock *, unsigned short);
|
||||
extern void rose_write_internal(struct sock *, int);
|
||||
extern int rose_decode(struct sk_buff *, int *, int *, int *, int *, int *);
|
||||
extern int rose_parse_facilities(unsigned char *, struct rose_facilities_struct *);
|
||||
extern int rose_parse_facilities(unsigned char *, unsigned int, struct rose_facilities_struct *);
|
||||
extern void rose_disconnect(struct sock *, int, int, int);
|
||||
|
||||
/* rose_timer.c */
|
||||
|
||||
Reference in New Issue
Block a user