bluetooth: hci_ll: clean up types a bit
Subsystems (2)
PATCH 1/1 bluetooth: hci_ll: clean up types a bit
I'm doing an audit of places where min_t() casting truncates a variable such as:
len = min_t(unsigned int, ll->rx_count, count);
Here ll->rx_count is unsigned long, but we cast it to unsigned int and lose the significant bits.
Looking at the code ->rx_count is never more than 256 so we could just make it an int.
drivers/bluetooth/hci_ll.c +3 -3
@@ -78,7 +78,7 @@ struct hcill_cmd {struct ll_struct {unsigned long rx_state; -unsigned long rx_count; +unsigned int rx_count;struct sk_buff *rx_skb;struct sk_buff_head txq;spinlock_t hcill_lock;/* HCILL state lock */
@@ -346,7 +346,7 @@ static int ll_enqueue(struct hci_uart *hu, struct sk_buff *skb)return 0 ; } -static inline int ll_check_data_len (struct ll_struct *ll,int len) +static inline int ll_check_data_len (struct ll_struct *ll,unsigned int len) { registerint room =skb_tailroom (ll->rx_skb);
@@ -380,7 +380,7 @@ static int ll_recv(struct hci_uart *hu, void *data, int count)struct hci_sco_hdr *sh; registerint len, type, dlen; -BT_DBG ("hu %p count %d rx_state %ld rx_count %ld" , hu, count, ll->rx_state, ll->rx_count); +BT_DBG ("hu %p count %d rx_state %ld rx_count %u" , hu, count, ll->rx_state, ll->rx_count); ptr = data;while (count) {
Hi Dan,
Quoted 8 lines · Dan Carpenter
I'm doing an audit of places where
min_t()casting truncates a variable such as:len = min_t(unsigned int, ll->rx_count, count);Here
ll->rx_countis unsigned long, but we cast it to unsigned int and lose the significant bits.Looking at the code ->rx_count is never more than 256 so we could just make it an int.
Where is this 256 maximum? I'm not seeing it?
Gustavo
Quoted 10 lines · Gustavo Padovan
Hi Dan,
Quoted 6 lines · Dan Carpenter
I'm doing an audit of places where
min_t()casting truncates a variable such as:len = min_t(unsigned int, ll->rx_count, count);Here
ll->rx_countis unsigned long, but we cast it to unsigned int and lose the significant bits.
Quoted 5 lines
Quoted 2 lines
Looking at the code ->rx_count is never more than 256 so we could just make it an int.
Where is this 256 maximum? I'm not seeing it?
I'm sorry for this, I was wrong. I'm not sure where I got that... I can see at least one place where it goes up to USHRT_MAX in the case of HCILL_W4_ACL_HDR.
I still think the patch is basically correct, but let me take another look and resend with an updated commit message.
regards,
dan carpenter