iwlwifi: Don't use buffer allocated on the stack for led names

Having the buffer on the stack and even re-using it for all led devices is bad.
Not being able to resolve the name member of the led device structure to a
meaningful value leads to confusion during ad-hoc debugging and potential
breakage in the future, if we ever decide to access the name member outside of
the registration function. Move the buffer to our private per led device
structures so that it is accessible after registration.

A quick grep didn't yield any occurence of using the led device name parameter
outside of the led device registration function, so currently we should already
be safe for normal operation.

Signed-off-by: Sven Wegener <sven.wegener@stealer.net>
Cc: Richard Purdie <rpurdie@rpsys.net>
Acked-by: Zhu Yi <yi.zhu@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

authored by Sven Wegener and committed by John W. Linville 5cbbb376 4fc22b21

+36 -28
+17 -16
drivers/net/wireless/iwlwifi/iwl-3945-led.c
··· 206 static int iwl3945_led_register_led(struct iwl3945_priv *priv, 207 struct iwl3945_led *led, 208 enum led_type type, u8 set_led, 209 - const char *name, char *trigger) 210 { 211 struct device *device = wiphy_dev(priv->hw->wiphy); 212 int ret; 213 214 - led->led_dev.name = name; 215 led->led_dev.brightness_set = iwl3945_led_brightness_set; 216 led->led_dev.default_trigger = trigger; 217 ··· 308 int iwl3945_led_register(struct iwl3945_priv *priv) 309 { 310 char *trigger; 311 - char name[32]; 312 int ret; 313 314 priv->last_blink_rate = 0; ··· 317 priv->allow_blinking = 0; 318 319 trigger = ieee80211_get_radio_led_name(priv->hw); 320 - snprintf(name, sizeof(name), "iwl-%s:radio", 321 wiphy_name(priv->hw->wiphy)); 322 323 priv->led[IWL_LED_TRG_RADIO].led_on = iwl3945_led_on; ··· 327 328 ret = iwl3945_led_register_led(priv, 329 &priv->led[IWL_LED_TRG_RADIO], 330 - IWL_LED_TRG_RADIO, 1, 331 - name, trigger); 332 if (ret) 333 goto exit_fail; 334 335 trigger = ieee80211_get_assoc_led_name(priv->hw); 336 - snprintf(name, sizeof(name), "iwl-%s:assoc", 337 wiphy_name(priv->hw->wiphy)); 338 339 ret = iwl3945_led_register_led(priv, 340 &priv->led[IWL_LED_TRG_ASSOC], 341 - IWL_LED_TRG_ASSOC, 0, 342 - name, trigger); 343 /* for assoc always turn led on */ 344 priv->led[IWL_LED_TRG_ASSOC].led_on = iwl3945_led_on; 345 priv->led[IWL_LED_TRG_ASSOC].led_off = iwl3945_led_on; ··· 350 goto exit_fail; 351 352 trigger = ieee80211_get_rx_led_name(priv->hw); 353 - snprintf(name, sizeof(name), "iwl-%s:RX", 354 wiphy_name(priv->hw->wiphy)); 355 - 356 357 ret = iwl3945_led_register_led(priv, 358 &priv->led[IWL_LED_TRG_RX], 359 - IWL_LED_TRG_RX, 0, 360 - name, trigger); 361 362 priv->led[IWL_LED_TRG_RX].led_on = iwl3945_led_associated; 363 priv->led[IWL_LED_TRG_RX].led_off = iwl3945_led_associated; ··· 366 goto exit_fail; 367 368 trigger = ieee80211_get_tx_led_name(priv->hw); 369 - snprintf(name, sizeof(name), "iwl-%s:TX", 370 wiphy_name(priv->hw->wiphy)); 371 372 ret = iwl3945_led_register_led(priv, 373 &priv->led[IWL_LED_TRG_TX], 374 - IWL_LED_TRG_TX, 0, 375 - name, trigger); 376 priv->led[IWL_LED_TRG_TX].led_on = iwl3945_led_associated; 377 priv->led[IWL_LED_TRG_TX].led_off = iwl3945_led_associated; 378 priv->led[IWL_LED_TRG_TX].led_pattern = iwl3945_led_pattern;
··· 206 static int iwl3945_led_register_led(struct iwl3945_priv *priv, 207 struct iwl3945_led *led, 208 enum led_type type, u8 set_led, 209 + char *trigger) 210 { 211 struct device *device = wiphy_dev(priv->hw->wiphy); 212 int ret; 213 214 + led->led_dev.name = led->name; 215 led->led_dev.brightness_set = iwl3945_led_brightness_set; 216 led->led_dev.default_trigger = trigger; 217 ··· 308 int iwl3945_led_register(struct iwl3945_priv *priv) 309 { 310 char *trigger; 311 int ret; 312 313 priv->last_blink_rate = 0; ··· 318 priv->allow_blinking = 0; 319 320 trigger = ieee80211_get_radio_led_name(priv->hw); 321 + snprintf(priv->led[IWL_LED_TRG_RADIO].name, 322 + sizeof(priv->led[IWL_LED_TRG_RADIO].name), "iwl-%s:radio", 323 wiphy_name(priv->hw->wiphy)); 324 325 priv->led[IWL_LED_TRG_RADIO].led_on = iwl3945_led_on; ··· 327 328 ret = iwl3945_led_register_led(priv, 329 &priv->led[IWL_LED_TRG_RADIO], 330 + IWL_LED_TRG_RADIO, 1, trigger); 331 + 332 if (ret) 333 goto exit_fail; 334 335 trigger = ieee80211_get_assoc_led_name(priv->hw); 336 + snprintf(priv->led[IWL_LED_TRG_ASSOC].name, 337 + sizeof(priv->led[IWL_LED_TRG_ASSOC].name), "iwl-%s:assoc", 338 wiphy_name(priv->hw->wiphy)); 339 340 ret = iwl3945_led_register_led(priv, 341 &priv->led[IWL_LED_TRG_ASSOC], 342 + IWL_LED_TRG_ASSOC, 0, trigger); 343 + 344 /* for assoc always turn led on */ 345 priv->led[IWL_LED_TRG_ASSOC].led_on = iwl3945_led_on; 346 priv->led[IWL_LED_TRG_ASSOC].led_off = iwl3945_led_on; ··· 349 goto exit_fail; 350 351 trigger = ieee80211_get_rx_led_name(priv->hw); 352 + snprintf(priv->led[IWL_LED_TRG_RX].name, 353 + sizeof(priv->led[IWL_LED_TRG_RX].name), "iwl-%s:RX", 354 wiphy_name(priv->hw->wiphy)); 355 356 ret = iwl3945_led_register_led(priv, 357 &priv->led[IWL_LED_TRG_RX], 358 + IWL_LED_TRG_RX, 0, trigger); 359 360 priv->led[IWL_LED_TRG_RX].led_on = iwl3945_led_associated; 361 priv->led[IWL_LED_TRG_RX].led_off = iwl3945_led_associated; ··· 366 goto exit_fail; 367 368 trigger = ieee80211_get_tx_led_name(priv->hw); 369 + snprintf(priv->led[IWL_LED_TRG_TX].name, 370 + sizeof(priv->led[IWL_LED_TRG_TX].name), "iwl-%s:TX", 371 wiphy_name(priv->hw->wiphy)); 372 373 ret = iwl3945_led_register_led(priv, 374 &priv->led[IWL_LED_TRG_TX], 375 + IWL_LED_TRG_TX, 0, trigger); 376 + 377 priv->led[IWL_LED_TRG_TX].led_on = iwl3945_led_associated; 378 priv->led[IWL_LED_TRG_TX].led_off = iwl3945_led_associated; 379 priv->led[IWL_LED_TRG_TX].led_pattern = iwl3945_led_pattern;
+1
drivers/net/wireless/iwlwifi/iwl-3945-led.h
··· 50 struct iwl3945_led { 51 struct iwl3945_priv *priv; 52 struct led_classdev led_dev; 53 54 int (*led_on) (struct iwl3945_priv *priv, int led_id); 55 int (*led_off) (struct iwl3945_priv *priv, int led_id);
··· 50 struct iwl3945_led { 51 struct iwl3945_priv *priv; 52 struct led_classdev led_dev; 53 + char name[32]; 54 55 int (*led_on) (struct iwl3945_priv *priv, int led_id); 56 int (*led_off) (struct iwl3945_priv *priv, int led_id);
+17 -12
drivers/net/wireless/iwlwifi/iwl-led.c
··· 242 */ 243 static int iwl_leds_register_led(struct iwl_priv *priv, struct iwl_led *led, 244 enum led_type type, u8 set_led, 245 - const char *name, char *trigger) 246 { 247 struct device *device = wiphy_dev(priv->hw->wiphy); 248 int ret; 249 250 - led->led_dev.name = name; 251 led->led_dev.brightness_set = iwl_led_brightness_set; 252 led->led_dev.default_trigger = trigger; 253 ··· 345 int iwl_leds_register(struct iwl_priv *priv) 346 { 347 char *trigger; 348 - char name[32]; 349 int ret; 350 351 priv->last_blink_rate = 0; ··· 353 priv->allow_blinking = 0; 354 355 trigger = ieee80211_get_radio_led_name(priv->hw); 356 - snprintf(name, sizeof(name), "iwl-%s:radio", 357 wiphy_name(priv->hw->wiphy)); 358 359 priv->led[IWL_LED_TRG_RADIO].led_on = iwl4965_led_on_reg; ··· 362 priv->led[IWL_LED_TRG_RADIO].led_pattern = NULL; 363 364 ret = iwl_leds_register_led(priv, &priv->led[IWL_LED_TRG_RADIO], 365 - IWL_LED_TRG_RADIO, 1, name, trigger); 366 if (ret) 367 goto exit_fail; 368 369 trigger = ieee80211_get_assoc_led_name(priv->hw); 370 - snprintf(name, sizeof(name), "iwl-%s:assoc", 371 wiphy_name(priv->hw->wiphy)); 372 373 ret = iwl_leds_register_led(priv, &priv->led[IWL_LED_TRG_ASSOC], 374 - IWL_LED_TRG_ASSOC, 0, name, trigger); 375 376 /* for assoc always turn led on */ 377 priv->led[IWL_LED_TRG_ASSOC].led_on = iwl_led_associate; ··· 383 goto exit_fail; 384 385 trigger = ieee80211_get_rx_led_name(priv->hw); 386 - snprintf(name, sizeof(name), "iwl-%s:RX", wiphy_name(priv->hw->wiphy)); 387 - 388 389 ret = iwl_leds_register_led(priv, &priv->led[IWL_LED_TRG_RX], 390 - IWL_LED_TRG_RX, 0, name, trigger); 391 392 priv->led[IWL_LED_TRG_RX].led_on = iwl_led_associated; 393 priv->led[IWL_LED_TRG_RX].led_off = iwl_led_associated; ··· 398 goto exit_fail; 399 400 trigger = ieee80211_get_tx_led_name(priv->hw); 401 - snprintf(name, sizeof(name), "iwl-%s:TX", wiphy_name(priv->hw->wiphy)); 402 ret = iwl_leds_register_led(priv, &priv->led[IWL_LED_TRG_TX], 403 - IWL_LED_TRG_TX, 0, name, trigger); 404 405 priv->led[IWL_LED_TRG_TX].led_on = iwl_led_associated; 406 priv->led[IWL_LED_TRG_TX].led_off = iwl_led_associated;
··· 242 */ 243 static int iwl_leds_register_led(struct iwl_priv *priv, struct iwl_led *led, 244 enum led_type type, u8 set_led, 245 + char *trigger) 246 { 247 struct device *device = wiphy_dev(priv->hw->wiphy); 248 int ret; 249 250 + led->led_dev.name = led->name; 251 led->led_dev.brightness_set = iwl_led_brightness_set; 252 led->led_dev.default_trigger = trigger; 253 ··· 345 int iwl_leds_register(struct iwl_priv *priv) 346 { 347 char *trigger; 348 int ret; 349 350 priv->last_blink_rate = 0; ··· 354 priv->allow_blinking = 0; 355 356 trigger = ieee80211_get_radio_led_name(priv->hw); 357 + snprintf(priv->led[IWL_LED_TRG_RADIO].name, 358 + sizeof(priv->led[IWL_LED_TRG_RADIO].name), "iwl-%s:radio", 359 wiphy_name(priv->hw->wiphy)); 360 361 priv->led[IWL_LED_TRG_RADIO].led_on = iwl4965_led_on_reg; ··· 362 priv->led[IWL_LED_TRG_RADIO].led_pattern = NULL; 363 364 ret = iwl_leds_register_led(priv, &priv->led[IWL_LED_TRG_RADIO], 365 + IWL_LED_TRG_RADIO, 1, trigger); 366 if (ret) 367 goto exit_fail; 368 369 trigger = ieee80211_get_assoc_led_name(priv->hw); 370 + snprintf(priv->led[IWL_LED_TRG_ASSOC].name, 371 + sizeof(priv->led[IWL_LED_TRG_ASSOC].name), "iwl-%s:assoc", 372 wiphy_name(priv->hw->wiphy)); 373 374 ret = iwl_leds_register_led(priv, &priv->led[IWL_LED_TRG_ASSOC], 375 + IWL_LED_TRG_ASSOC, 0, trigger); 376 377 /* for assoc always turn led on */ 378 priv->led[IWL_LED_TRG_ASSOC].led_on = iwl_led_associate; ··· 382 goto exit_fail; 383 384 trigger = ieee80211_get_rx_led_name(priv->hw); 385 + snprintf(priv->led[IWL_LED_TRG_RX].name, 386 + sizeof(priv->led[IWL_LED_TRG_RX].name), "iwl-%s:RX", 387 + wiphy_name(priv->hw->wiphy)); 388 389 ret = iwl_leds_register_led(priv, &priv->led[IWL_LED_TRG_RX], 390 + IWL_LED_TRG_RX, 0, trigger); 391 392 priv->led[IWL_LED_TRG_RX].led_on = iwl_led_associated; 393 priv->led[IWL_LED_TRG_RX].led_off = iwl_led_associated; ··· 396 goto exit_fail; 397 398 trigger = ieee80211_get_tx_led_name(priv->hw); 399 + snprintf(priv->led[IWL_LED_TRG_TX].name, 400 + sizeof(priv->led[IWL_LED_TRG_TX].name), "iwl-%s:TX", 401 + wiphy_name(priv->hw->wiphy)); 402 + 403 ret = iwl_leds_register_led(priv, &priv->led[IWL_LED_TRG_TX], 404 + IWL_LED_TRG_TX, 0, trigger); 405 406 priv->led[IWL_LED_TRG_TX].led_on = iwl_led_associated; 407 priv->led[IWL_LED_TRG_TX].led_off = iwl_led_associated;
+1
drivers/net/wireless/iwlwifi/iwl-led.h
··· 52 struct iwl_led { 53 struct iwl_priv *priv; 54 struct led_classdev led_dev; 55 56 int (*led_on) (struct iwl_priv *priv, int led_id); 57 int (*led_off) (struct iwl_priv *priv, int led_id);
··· 52 struct iwl_led { 53 struct iwl_priv *priv; 54 struct led_classdev led_dev; 55 + char name[32]; 56 57 int (*led_on) (struct iwl_priv *priv, int led_id); 58 int (*led_off) (struct iwl_priv *priv, int led_id);