kern/176238: [PATCH] ath: Correct buffer size calculation and simplify calling if_ath_alq_post()
Christoph Mallon
christoph.mallon at gmx.de
Mon Feb 18 13:30:01 UTC 2013
>Number: 176238
>Category: kern
>Synopsis: [PATCH] ath: Correct buffer size calculation and simplify calling if_ath_alq_post()
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Mon Feb 18 13:30:01 UTC 2013
>Closed-Date:
>Last-Modified:
>Originator: Christoph Mallon
>Release:
>Organization:
>Environment:
>Description:
These patches address two points:
- Correct buffer size calculation when calling if_ath_alq_post_in() in if_ath_alq_post_intr()
- Avoid explicit casts for calling if_ath_alq_post() by making buf a const void*
>How-To-Repeat:
>Fix:
Please apply these patches.
--- 0001-ath-Correct-sizeof-calculation-in-if_ath_alq_post_in.patch begins here ---
>From a709ff6df2db2ddb5b87ec7dd2da2f1df5f6f308 Mon Sep 17 00:00:00 2001
From: Christoph Mallon <christoph.mallon at gmx.de>
Date: Mon, 18 Feb 2013 10:27:26 +0100
Subject: [PATCH 1/2] ath: Correct sizeof calculation in
if_ath_alq_post_intr().
This bug was introduced in r246933.
---
sys/dev/ath/if_ath_alq.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sys/dev/ath/if_ath_alq.h b/sys/dev/ath/if_ath_alq.h
index 52a022d..541f2d7 100644
--- a/sys/dev/ath/if_ath_alq.h
+++ b/sys/dev/ath/if_ath_alq.h
@@ -168,7 +168,7 @@ if_ath_alq_post_intr(struct if_ath_alq *alq, uint32_t status,
intr.intr_state[i] = htobe32(state[i]);
intr.intr_syncstate = htobe32(sync_state);
- if_ath_alq_post(alq, ATH_ALQ_INTR_STATUS, sizeof(&intr),
+ if_ath_alq_post(alq, ATH_ALQ_INTR_STATUS, sizeof(intr),
(const char *) &intr);
}
--
1.8.1.3
--- 0001-ath-Correct-sizeof-calculation-in-if_ath_alq_post_in.patch ends here ---
--- dummy1 begins here ---
dummy file, because GNATS damages every other patch
--- dummy1 ends here ---
--- 0002-ath-Simplify-usage-of-if_ath_alq_post-by-changing-th.patch begins here ---
>From ef203f1c533dd050ad18108cd7d1436d5eb26d67 Mon Sep 17 00:00:00 2001
From: Christoph Mallon <christoph.mallon at gmx.de>
Date: Mon, 18 Feb 2013 10:30:15 +0100
Subject: [PATCH 2/2] ath: Simplify usage of if_ath_alq_post() by changing the
type of buf to const void*.
---
sys/dev/ath/if_ath.c | 3 +--
sys/dev/ath/if_ath_alq.c | 5 ++---
sys/dev/ath/if_ath_alq.h | 5 ++---
sys/dev/ath/if_ath_rx.c | 2 +-
sys/dev/ath/if_ath_rx_edma.c | 2 +-
sys/dev/ath/if_ath_tdma.c | 10 +++++-----
sys/dev/ath/if_ath_tx_edma.c | 3 +--
7 files changed, 13 insertions(+), 17 deletions(-)
diff --git a/sys/dev/ath/if_ath.c b/sys/dev/ath/if_ath.c
index b6b4217..c497361 100644
--- a/sys/dev/ath/if_ath.c
+++ b/sys/dev/ath/if_ath.c
@@ -3820,8 +3820,7 @@ ath_tx_processq(struct ath_softc *sc, struct ath_txq *txq, int dosched)
if (if_ath_alq_checkdebug(&sc->sc_alq,
ATH_ALQ_EDMA_TXSTATUS)) {
if_ath_alq_post(&sc->sc_alq, ATH_ALQ_EDMA_TXSTATUS,
- sc->sc_tx_statuslen,
- (char *) ds);
+ sc->sc_tx_statuslen, ds);
}
#endif
diff --git a/sys/dev/ath/if_ath_alq.c b/sys/dev/ath/if_ath_alq.c
index 1ad13db..48b98e6 100644
--- a/sys/dev/ath/if_ath_alq.c
+++ b/sys/dev/ath/if_ath_alq.c
@@ -121,8 +121,7 @@ if_ath_alq_start(struct if_ath_alq *alq)
printf("%s (%s): opened\n", __func__, alq->sc_alq_devname);
alq->sc_alq_isactive = 1;
if_ath_alq_post(alq, ATH_ALQ_INIT_STATE,
- sizeof (struct if_ath_alq_init_state),
- (char *) &alq->sc_alq_cfg);
+ sizeof(alq->sc_alq_cfg), &alq->sc_alq_cfg);
}
return (error);
}
@@ -150,7 +149,7 @@ if_ath_alq_stop(struct if_ath_alq *alq)
*/
void
if_ath_alq_post(struct if_ath_alq *alq, uint16_t op, uint16_t len,
- const char *buf)
+ const void *buf)
{
struct if_ath_alq_hdr *ap;
struct ale *ale;
diff --git a/sys/dev/ath/if_ath_alq.h b/sys/dev/ath/if_ath_alq.h
index 541f2d7..10a00b1 100644
--- a/sys/dev/ath/if_ath_alq.h
+++ b/sys/dev/ath/if_ath_alq.h
@@ -150,7 +150,7 @@ extern void if_ath_alq_tidyup(struct if_ath_alq *alq);
extern int if_ath_alq_start(struct if_ath_alq *alq);
extern int if_ath_alq_stop(struct if_ath_alq *alq);
extern void if_ath_alq_post(struct if_ath_alq *alq, uint16_t op,
- uint16_t len, const char *buf);
+ uint16_t len, const void *buf);
/* XXX maybe doesn't belong here? */
static inline void
@@ -168,8 +168,7 @@ if_ath_alq_post_intr(struct if_ath_alq *alq, uint32_t status,
intr.intr_state[i] = htobe32(state[i]);
intr.intr_syncstate = htobe32(sync_state);
- if_ath_alq_post(alq, ATH_ALQ_INTR_STATUS, sizeof(intr),
- (const char *) &intr);
+ if_ath_alq_post(alq, ATH_ALQ_INTR_STATUS, sizeof(intr), &intr);
}
#endif /* _KERNEL */
diff --git a/sys/dev/ath/if_ath_rx.c b/sys/dev/ath/if_ath_rx.c
index 139e894..a9d9e77 100644
--- a/sys/dev/ath/if_ath_rx.c
+++ b/sys/dev/ath/if_ath_rx.c
@@ -921,7 +921,7 @@ ath_rx_proc(struct ath_softc *sc, int resched)
#ifdef ATH_DEBUG_ALQ
if (if_ath_alq_checkdebug(&sc->sc_alq, ATH_ALQ_EDMA_RXSTATUS))
if_ath_alq_post(&sc->sc_alq, ATH_ALQ_EDMA_RXSTATUS,
- sc->sc_rx_statuslen, (char *) ds);
+ sc->sc_rx_statuslen, ds);
#endif /* ATH_DEBUG_ALQ */
if (status == HAL_EINPROGRESS)
diff --git a/sys/dev/ath/if_ath_rx_edma.c b/sys/dev/ath/if_ath_rx_edma.c
index 301a22c..e599f1c 100644
--- a/sys/dev/ath/if_ath_rx_edma.c
+++ b/sys/dev/ath/if_ath_rx_edma.c
@@ -365,7 +365,7 @@ ath_edma_recv_proc_queue(struct ath_softc *sc, HAL_RX_QUEUE qtype,
#ifdef ATH_DEBUG_ALQ
if (if_ath_alq_checkdebug(&sc->sc_alq, ATH_ALQ_EDMA_RXSTATUS))
if_ath_alq_post(&sc->sc_alq, ATH_ALQ_EDMA_RXSTATUS,
- sc->sc_rx_statuslen, (char *) ds);
+ sc->sc_rx_statuslen, ds);
#endif /* ATH_DEBUG */
if (bf->bf_rxstatus == HAL_EINPROGRESS)
break;
diff --git a/sys/dev/ath/if_ath_tdma.c b/sys/dev/ath/if_ath_tdma.c
index 5cfe238..0606e77 100644
--- a/sys/dev/ath/if_ath_tdma.c
+++ b/sys/dev/ath/if_ath_tdma.c
@@ -170,7 +170,7 @@ ath_tdma_settimers(struct ath_softc *sc, u_int32_t nexttbtt, u_int32_t bintval)
t.sc_tdmadbaprep = htobe32(sc->sc_tdmadbaprep);
t.sc_tdmaswbaprep = htobe32(sc->sc_tdmaswbaprep);
if_ath_alq_post(&sc->sc_alq, ATH_ALQ_TDMA_TIMER_SET,
- sizeof(t), (char *) &t);
+ sizeof(t), &t);
}
#endif
@@ -315,7 +315,7 @@ ath_tdma_config(struct ath_softc *sc, struct ieee80211vap *vap)
t.tdma_dbaprep = htobe32(sc->sc_tdmadbaprep);
if_ath_alq_post(&sc->sc_alq, ATH_ALQ_TDMA_TIMER_CONFIG,
- sizeof(t), (char *) &t);
+ sizeof(t), &t);
}
#endif /* ATH_DEBUG_ALQ */
}
@@ -479,7 +479,7 @@ ath_tdma_update(struct ieee80211_node *ni,
t.nextslot_tu = htobe32(nextslottu);
t.txtime = htobe32(txtime);
if_ath_alq_post(&sc->sc_alq, ATH_ALQ_TDMA_BEACON_STATE,
- sizeof(t), (char *) &t);
+ sizeof(t), &t);
}
if (if_ath_alq_checkdebug(&sc->sc_alq, ATH_ALQ_TDMA_SLOT_CALC)) {
@@ -492,7 +492,7 @@ ath_tdma_update(struct ieee80211_node *ni,
t.avg_minus = htobe32(TDMA_AVG(sc->sc_avgtsfdeltam));
if_ath_alq_post(&sc->sc_alq, ATH_ALQ_TDMA_SLOT_CALC,
- sizeof(t), (char *) &t);
+ sizeof(t), &t);
}
#endif
@@ -554,7 +554,7 @@ ath_tdma_update(struct ieee80211_node *ni,
t.tsf64_old = htobe64(tsf);
t.tsf64_new = htobe64(tsf + tsfdelta);
if_ath_alq_post(&sc->sc_alq, ATH_ALQ_TDMA_TSF_ADJUST,
- sizeof(t), (char *) &t);
+ sizeof(t), &t);
}
#endif /* ATH_DEBUG_ALQ */
sc->sc_stats.ast_tdma_tsf++;
diff --git a/sys/dev/ath/if_ath_tx_edma.c b/sys/dev/ath/if_ath_tx_edma.c
index 6c6889c..c7a1b7a 100644
--- a/sys/dev/ath/if_ath_tx_edma.c
+++ b/sys/dev/ath/if_ath_tx_edma.c
@@ -498,8 +498,7 @@ ath_edma_tx_processq(struct ath_softc *sc, int dosched)
#ifdef ATH_DEBUG_ALQ
if (if_ath_alq_checkdebug(&sc->sc_alq, ATH_ALQ_EDMA_TXSTATUS))
if_ath_alq_post(&sc->sc_alq, ATH_ALQ_EDMA_TXSTATUS,
- sc->sc_tx_statuslen,
- (char *) txstatus);
+ sc->sc_tx_statuslen, txstatus);
#endif /* ATH_DEBUG_ALQ */
/*
--
1.8.1.3
--- 0002-ath-Simplify-usage-of-if_ath_alq_post-by-changing-th.patch ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-bugs
mailing list