On Thu, Dec 22, 2022 at 01:14:57AM +0100, Patrick Wildt wrote:
> On Tue, Dec 20, 2022 at 05:48:41PM -0700, Todd C. Miller wrote:
> > On Tue, 20 Dec 2022 23:44:08 +0100, Patrick Wildt wrote:
> >
> > > clang complains when the function is declared with a fixed array size in
> > > a parameter while the prototype is unbounded, like this:
> > >
> > > /usr/src/sys/net/pf.c:4353:54: error: argument 'sns' of type 'struct
> > > pf_src_n
> > > ode *[4]' with mismatched bound [-Werror,-Warray-parameter]
> > > struct pf_rule_actions *act, struct pf_src_node *sns[PF_SN_MAX])
> > > ^
> > > /usr/src/sys/net/pf.c:203:28: note: previously declared as 'struct
> > > pf_src_nod
> > > e *[]' here
> > > struct pf_src_node *[]);
> > > ^
> > > 1 error generated.
> > >
> > > We have a few of that, and was wondering what the better solution is.
> > > clang apparently accepts using * instead of []. The alternative would
> > > be to hardcode the size in the prototype as well. Here's a diff for
> > > a three files for the first version, as example.
> >
> > Using * instead of [] is the saner approach. Hard-coding the sizes
> > into the prototype seems like a bad idea, even if clang is now smart
> > enough to complain about a mismatch.
> >
> > - todd
>
> So, here's the full diff that allows me to compile arm64 GENERIC.MP,
> with radeondrm and amdgpu disabled.
Right, sorry for derailing the thread with a different discussion.
Here's a diff only for the array/ptr changes.
ok?
Patrick
diff --git a/sys/crypto/sha2.c b/sys/crypto/sha2.c
index f789ef3f55b..b2b79f286f3 100644
--- a/sys/crypto/sha2.c
+++ b/sys/crypto/sha2.c
@@ -470,7 +470,7 @@ SHA256Update(SHA2_CTX *context, const void *dataptr, size_t
len)
}
void
-SHA256Final(u_int8_t digest[], SHA2_CTX *context)
+SHA256Final(u_int8_t *digest, SHA2_CTX *context)
{
unsigned int usedspace;
@@ -795,7 +795,7 @@ SHA512Last(SHA2_CTX *context)
}
void
-SHA512Final(u_int8_t digest[], SHA2_CTX *context)
+SHA512Final(u_int8_t *digest, SHA2_CTX *context)
{
SHA512Last(context);
@@ -834,7 +834,7 @@ SHA384Update(SHA2_CTX *context, const void *data, size_t
len)
}
void
-SHA384Final(u_int8_t digest[], SHA2_CTX *context)
+SHA384Final(u_int8_t *digest, SHA2_CTX *context)
{
SHA512Last(context);
diff --git a/sys/dev/ic/ar5008.c b/sys/dev/ic/ar5008.c
index cad0f142210..4c0126fd6d6 100644
--- a/sys/dev/ic/ar5008.c
+++ b/sys/dev/ic/ar5008.c
@@ -111,7 +111,7 @@ void ar5008_next_calib(struct athn_softc *);
void ar5008_calib_iq(struct athn_softc *);
void ar5008_calib_adc_gain(struct athn_softc *);
void ar5008_calib_adc_dc_off(struct athn_softc *);
-void ar5008_write_txpower(struct athn_softc *, int16_t power[]);
+void ar5008_write_txpower(struct athn_softc *, int16_t *);
void ar5008_set_viterbi_mask(struct athn_softc *, int);
void ar5008_hw_init(struct athn_softc *, struct ieee80211_channel *,
struct ieee80211_channel *);
@@ -119,9 +119,9 @@ uint8_t ar5008_get_vpd(uint8_t, const uint8_t *, const
uint8_t *, int);
void ar5008_get_pdadcs(struct athn_softc *, uint8_t, struct athn_pier *,
struct athn_pier *, int, int, uint8_t, uint8_t *, uint8_t *);
void ar5008_get_lg_tpow(struct athn_softc *, struct ieee80211_channel *,
- uint8_t, const struct ar_cal_target_power_leg *, int, uint8_t[]);
+ uint8_t, const struct ar_cal_target_power_leg *, int, uint8_t *);
void ar5008_get_ht_tpow(struct athn_softc *, struct ieee80211_channel *,
- uint8_t, const struct ar_cal_target_power_ht *, int, uint8_t[]);
+ uint8_t, const struct ar_cal_target_power_ht *, int, uint8_t *);
void ar5008_set_noise_immunity_level(struct athn_softc *, int);
void ar5008_enable_ofdm_weak_signal(struct athn_softc *);
void ar5008_disable_ofdm_weak_signal(struct athn_softc *);
diff --git a/sys/dev/ic/ar9003.c b/sys/dev/ic/ar9003.c
index 565ea27c701..7ec3131f86b 100644
--- a/sys/dev/ic/ar9003.c
+++ b/sys/dev/ic/ar9003.c
@@ -114,7 +114,7 @@ int ar9003_init_calib(struct athn_softc *);
void ar9003_do_calib(struct athn_softc *);
void ar9003_next_calib(struct athn_softc *);
void ar9003_calib_iq(struct athn_softc *);
-int ar9003_get_iq_corr(struct athn_softc *, int32_t[], int32_t[]);
+int ar9003_get_iq_corr(struct athn_softc *, int32_t *, int32_t *);
int ar9003_calib_tx_iq(struct athn_softc *);
void ar9003_paprd_calib(struct athn_softc *, struct ieee80211_channel *);
int ar9003_get_desired_txgain(struct athn_softc *, int, int);
@@ -126,17 +126,17 @@ int ar9003_compute_predistortion(struct athn_softc
*, const uint32_t *,
void ar9003_enable_predistorter(struct athn_softc *, int);
void ar9003_paprd_enable(struct athn_softc *);
void ar9003_paprd_tx_tone_done(struct athn_softc *);
-void ar9003_write_txpower(struct athn_softc *, int16_t power[]);
+void ar9003_write_txpower(struct athn_softc *, int16_t *);
void ar9003_reset_rx_gain(struct athn_softc *, struct ieee80211_channel *);
void ar9003_reset_tx_gain(struct athn_softc *, struct ieee80211_channel *);
void ar9003_hw_init(struct athn_softc *, struct ieee80211_channel *,
struct ieee80211_channel *);
void ar9003_get_lg_tpow(struct athn_softc *, struct ieee80211_channel *,
uint8_t, const uint8_t *, const struct ar_cal_target_power_leg *,
- int, uint8_t[]);
+ int, uint8_t *);
void ar9003_get_ht_tpow(struct athn_softc *, struct ieee80211_channel *,
uint8_t, const uint8_t *, const struct ar_cal_target_power_ht *,
- int, uint8_t[]);
+ int, uint8_t *);
void ar9003_set_noise_immunity_level(struct athn_softc *, int);
void ar9003_enable_ofdm_weak_signal(struct athn_softc *);
void ar9003_disable_ofdm_weak_signal(struct athn_softc *);
diff --git a/sys/dev/ic/rtwn.c b/sys/dev/ic/rtwn.c
index 2d7551eaef3..d7f25d59919 100644
--- a/sys/dev/ic/rtwn.c
+++ b/sys/dev/ic/rtwn.c
@@ -151,19 +151,19 @@ void rtwn_pa_bias_init(struct rtwn_softc *);
void rtwn_rxfilter_init(struct rtwn_softc *);
void rtwn_edca_init(struct rtwn_softc *);
void rtwn_rate_fallback_init(struct rtwn_softc *);
-void rtwn_write_txpower(struct rtwn_softc *, int, uint16_t[]);
+void rtwn_write_txpower(struct rtwn_softc *, int, uint16_t *);
void rtwn_get_txpower(struct rtwn_softc *sc, int,
struct ieee80211_channel *, struct ieee80211_channel *,
- uint16_t[]);
+ uint16_t *);
void rtwn_r92c_get_txpower(struct rtwn_softc *, int,
struct ieee80211_channel *, struct ieee80211_channel *,
- uint16_t[]);
+ uint16_t *);
void rtwn_r92e_get_txpower(struct rtwn_softc *, int,
struct ieee80211_channel *,
- struct ieee80211_channel *, uint16_t[]);
+ struct ieee80211_channel *, uint16_t *);
void rtwn_r88e_get_txpower(struct rtwn_softc *, int,
struct ieee80211_channel *,
- struct ieee80211_channel *, uint16_t[]);
+ struct ieee80211_channel *, uint16_t *);
void rtwn_set_txpower(struct rtwn_softc *,
struct ieee80211_channel *, struct ieee80211_channel *);
void rtwn_set_chan(struct rtwn_softc *,
diff --git a/sys/kern/sys_generic.c b/sys/kern/sys_generic.c
index c8bba8d51a4..5da27021ecf 100644
--- a/sys/kern/sys_generic.c
+++ b/sys/kern/sys_generic.c
@@ -74,8 +74,8 @@ int kqpoll_debug = 0;
printf(x); \
}
-int pselregister(struct proc *, fd_set *[], fd_set *[], int, int *, int *);
-int pselcollect(struct proc *, struct kevent *, fd_set *[], int *);
+int pselregister(struct proc *, fd_set **, fd_set **, int, int *, int *);
+int pselcollect(struct proc *, struct kevent *, fd_set **, int *);
void ppollregister(struct proc *, struct pollfd *, int, int *, int *);
int ppollcollect(struct proc *, struct kevent *, struct pollfd *, u_int);
diff --git a/sys/net/pf.c b/sys/net/pf.c
index 1ee69b734e7..8439f5d19f3 100644
--- a/sys/net/pf.c
+++ b/sys/net/pf.c
@@ -201,7 +201,7 @@ static __inline int pf_create_state(struct pf_pdesc *,
struct pf_rule *,
struct pf_state_key **, struct pf_state_key **,
int *, struct pf_state **, int,
struct pf_rule_slist *, struct pf_rule_actions *,
- struct pf_src_node *[]);
+ struct pf_src_node **);
static __inline int pf_state_key_addr_setup(struct pf_pdesc *, void *,
int, struct pf_addr *, int, struct pf_addr *,
int, int);
diff --git a/sys/net/toeplitz.h b/sys/net/toeplitz.h
index 3ce66ead3ba..810b93ffd88 100644
--- a/sys/net/toeplitz.h
+++ b/sys/net/toeplitz.h
@@ -54,7 +54,7 @@ uint16_t stoeplitz_hash_ip6port(const struct
stoeplitz_cache *,
#endif
uint16_t stoeplitz_hash_eaddr(const struct stoeplitz_cache *,
- const uint8_t []);
+ const uint8_t *);
/* hash a uint16_t in network byte order */
static __unused inline uint16_t
diff --git a/sys/net80211/ieee80211_input.c b/sys/net80211/ieee80211_input.c
index 212209fb7e3..55b05b1362b 100644
--- a/sys/net80211/ieee80211_input.c
+++ b/sys/net80211/ieee80211_input.c
@@ -87,8 +87,8 @@ int ieee80211_parse_edca_params_body(struct ieee80211com *,
const u_int8_t *);
int ieee80211_parse_edca_params(struct ieee80211com *, const u_int8_t *);
int ieee80211_parse_wmm_params(struct ieee80211com *, const u_int8_t *);
-enum ieee80211_cipher ieee80211_parse_rsn_cipher(const u_int8_t[]);
-enum ieee80211_akm ieee80211_parse_rsn_akm(const u_int8_t[]);
+enum ieee80211_cipher ieee80211_parse_rsn_cipher(const u_int8_t *);
+enum ieee80211_akm ieee80211_parse_rsn_akm(const u_int8_t *);
int ieee80211_parse_rsn_body(struct ieee80211com *, const u_int8_t *,
u_int, struct ieee80211_rsnparams *);
int ieee80211_save_ie(const u_int8_t *, u_int8_t **);
diff --git a/sys/netinet/if_ether.h b/sys/netinet/if_ether.h
index 3f32a4729d6..6f70643e4ce 100644
--- a/sys/netinet/if_ether.h
+++ b/sys/netinet/if_ether.h
@@ -271,7 +271,7 @@ void arp_rtrequest(struct ifnet *, int, struct
rtentry *);
void ether_fakeaddr(struct ifnet *);
int ether_addmulti(struct ifreq *, struct arpcom *);
int ether_delmulti(struct ifreq *, struct arpcom *);
-int ether_multiaddr(struct sockaddr *, u_int8_t[], u_int8_t[]);
+int ether_multiaddr(struct sockaddr *, u_int8_t *, u_int8_t *);
void ether_ifattach(struct ifnet *);
void ether_ifdetach(struct ifnet *);
int ether_ioctl(struct ifnet *, struct arpcom *, u_long, caddr_t);