Skip to contentSkip to conversation

bluetooth: hci_ll: clean up types a bit

PATCH In review Dan Carpenter 2 participants 3 messages Sep 26, 2011 – Sep 29, 2011

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

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
index 7e4b435..7bb1d8e 100644
@@ -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)
 {
 	register int 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;
 	register int 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) {
#1 lore raw

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_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.

Where is this 256 maximum? I'm not seeing it?

Gustavo

#2 lore raw
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_count is 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