Commit 377e7a27 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Make static usermode helper binaries constant

There are a number of usermode helper binaries that are "hard coded" in
the kernel today, so mark them as "const" to make it harder for someone
to change where the variables point to.

Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Thomas Sailer <t.sailer@alumni.ethz.ch>
Cc: "Rafael J. Wysocki" <rafael.j.wysocki@intel.com>
Cc: Johan Hovold <johan@kernel.org>
Cc: Alex Elder <elder@kernel.org>
Cc: "J. Bruce Fields" <bfields@fieldses.org>
Cc: Jeff Layton <jlayton@poochiereds.net>
Cc: David Howells <dhowells@redhat.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 6d2c5d6c
...@@ -74,8 +74,8 @@ static inline void wf_notify(int event, void *param) ...@@ -74,8 +74,8 @@ static inline void wf_notify(int event, void *param)
static int wf_critical_overtemp(void) static int wf_critical_overtemp(void)
{ {
static char * critical_overtemp_path = "/sbin/critical_overtemp"; static char const critical_overtemp_path[] = "/sbin/critical_overtemp";
char *argv[] = { critical_overtemp_path, NULL }; char *argv[] = { (char *)critical_overtemp_path, NULL };
static char *envp[] = { "HOME=/", static char *envp[] = { "HOME=/",
"TERM=linux", "TERM=linux",
"PATH=/sbin:/usr/sbin:/bin:/usr/bin", "PATH=/sbin:/usr/sbin:/bin:/usr/bin",
......
...@@ -299,7 +299,7 @@ static inline void baycom_int_freq(struct baycom_state *bc) ...@@ -299,7 +299,7 @@ static inline void baycom_int_freq(struct baycom_state *bc)
* eppconfig_path should be setable via /proc/sys. * eppconfig_path should be setable via /proc/sys.
*/ */
static char eppconfig_path[256] = "/usr/sbin/eppfpga"; static char const eppconfig_path[] = "/usr/sbin/eppfpga";
static char *envp[] = { "HOME=/", "TERM=linux", "PATH=/usr/bin:/bin", NULL }; static char *envp[] = { "HOME=/", "TERM=linux", "PATH=/usr/bin:/bin", NULL };
...@@ -308,8 +308,12 @@ static int eppconfig(struct baycom_state *bc) ...@@ -308,8 +308,12 @@ static int eppconfig(struct baycom_state *bc)
{ {
char modearg[256]; char modearg[256];
char portarg[16]; char portarg[16];
char *argv[] = { eppconfig_path, "-s", "-p", portarg, "-m", modearg, char *argv[] = {
NULL }; (char *)eppconfig_path,
"-s",
"-p", portarg,
"-m", modearg,
NULL };
/* set up arguments */ /* set up arguments */
sprintf(modearg, "%sclk,%smodem,fclk=%d,bps=%d,divider=%d%s,extstat", sprintf(modearg, "%sclk,%smodem,fclk=%d,bps=%d,divider=%d%s,extstat",
......
...@@ -98,6 +98,7 @@ static struct completion unload_sem; ...@@ -98,6 +98,7 @@ static struct completion unload_sem;
*/ */
static int pnp_dock_event(int dock, struct pnp_docking_station_info *info) static int pnp_dock_event(int dock, struct pnp_docking_station_info *info)
{ {
static char const sbin_pnpbios[] = "/sbin/pnpbios";
char *argv[3], **envp, *buf, *scratch; char *argv[3], **envp, *buf, *scratch;
int i = 0, value; int i = 0, value;
...@@ -112,7 +113,7 @@ static int pnp_dock_event(int dock, struct pnp_docking_station_info *info) ...@@ -112,7 +113,7 @@ static int pnp_dock_event(int dock, struct pnp_docking_station_info *info)
* integrated into the driver core and use the usual infrastructure * integrated into the driver core and use the usual infrastructure
* like sysfs and uevents * like sysfs and uevents
*/ */
argv[0] = "/sbin/pnpbios"; argv[0] = (char *)sbin_pnpbios;
argv[1] = "dock"; argv[1] = "dock";
argv[2] = NULL; argv[2] = NULL;
...@@ -139,7 +140,7 @@ static int pnp_dock_event(int dock, struct pnp_docking_station_info *info) ...@@ -139,7 +140,7 @@ static int pnp_dock_event(int dock, struct pnp_docking_station_info *info)
info->location_id, info->serial, info->capabilities); info->location_id, info->serial, info->capabilities);
envp[i] = NULL; envp[i] = NULL;
value = call_usermodehelper(argv [0], argv, envp, UMH_WAIT_EXEC); value = call_usermodehelper(sbin_pnpbios, argv, envp, UMH_WAIT_EXEC);
kfree(buf); kfree(buf);
kfree(envp); kfree(envp);
return 0; return 0;
......
...@@ -44,14 +44,14 @@ static int svc_watchdog_pm_notifier(struct notifier_block *notifier, ...@@ -44,14 +44,14 @@ static int svc_watchdog_pm_notifier(struct notifier_block *notifier,
static void greybus_reset(struct work_struct *work) static void greybus_reset(struct work_struct *work)
{ {
static char start_path[256] = "/system/bin/start"; static char const start_path[] = "/system/bin/start";
static char *envp[] = { static char *envp[] = {
"HOME=/", "HOME=/",
"PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin", "PATH=/sbin:/vendor/bin:/system/sbin:/system/bin:/system/xbin",
NULL, NULL,
}; };
static char *argv[] = { static char *argv[] = {
start_path, (char *)start_path,
"unipro_reset", "unipro_reset",
NULL, NULL,
}; };
......
...@@ -268,8 +268,8 @@ void rtl92e_dm_watchdog(struct net_device *dev) ...@@ -268,8 +268,8 @@ void rtl92e_dm_watchdog(struct net_device *dev)
static void _rtl92e_dm_check_ac_dc_power(struct net_device *dev) static void _rtl92e_dm_check_ac_dc_power(struct net_device *dev)
{ {
struct r8192_priv *priv = rtllib_priv(dev); struct r8192_priv *priv = rtllib_priv(dev);
static char *ac_dc_script = "/etc/acpi/wireless-rtl-ac-dc-power.sh"; static char const ac_dc_script[] = "/etc/acpi/wireless-rtl-ac-dc-power.sh";
char *argv[] = {ac_dc_script, DRV_NAME, NULL}; char *argv[] = {(char *)ac_dc_script, DRV_NAME, NULL};
static char *envp[] = {"HOME=/", static char *envp[] = {"HOME=/",
"TERM=linux", "TERM=linux",
"PATH=/usr/bin:/bin", "PATH=/usr/bin:/bin",
...@@ -1823,7 +1823,7 @@ static void _rtl92e_dm_check_rf_ctrl_gpio(void *data) ...@@ -1823,7 +1823,7 @@ static void _rtl92e_dm_check_rf_ctrl_gpio(void *data)
enum rt_rf_power_state eRfPowerStateToSet; enum rt_rf_power_state eRfPowerStateToSet;
bool bActuallySet = false; bool bActuallySet = false;
char *argv[3]; char *argv[3];
static char *RadioPowerPath = "/etc/acpi/events/RadioPower.sh"; static char const RadioPowerPath[] = "/etc/acpi/events/RadioPower.sh";
static char *envp[] = {"HOME=/", "TERM=linux", "PATH=/usr/bin:/bin", static char *envp[] = {"HOME=/", "TERM=linux", "PATH=/usr/bin:/bin",
NULL}; NULL};
...@@ -1862,7 +1862,7 @@ static void _rtl92e_dm_check_rf_ctrl_gpio(void *data) ...@@ -1862,7 +1862,7 @@ static void _rtl92e_dm_check_rf_ctrl_gpio(void *data)
else else
argv[1] = "RFON"; argv[1] = "RFON";
argv[0] = RadioPowerPath; argv[0] = (char *)RadioPowerPath;
argv[2] = NULL; argv[2] = NULL;
call_usermodehelper(RadioPowerPath, argv, envp, UMH_WAIT_PROC); call_usermodehelper(RadioPowerPath, argv, envp, UMH_WAIT_PROC);
} }
......
...@@ -613,6 +613,7 @@ nfsd4_cb_layout_fail(struct nfs4_layout_stateid *ls) ...@@ -613,6 +613,7 @@ nfsd4_cb_layout_fail(struct nfs4_layout_stateid *ls)
{ {
struct nfs4_client *clp = ls->ls_stid.sc_client; struct nfs4_client *clp = ls->ls_stid.sc_client;
char addr_str[INET6_ADDRSTRLEN]; char addr_str[INET6_ADDRSTRLEN];
static char const nfsd_recall_failed[] = "/sbin/nfsd-recall-failed";
static char *envp[] = { static char *envp[] = {
"HOME=/", "HOME=/",
"TERM=linux", "TERM=linux",
...@@ -628,12 +629,13 @@ nfsd4_cb_layout_fail(struct nfs4_layout_stateid *ls) ...@@ -628,12 +629,13 @@ nfsd4_cb_layout_fail(struct nfs4_layout_stateid *ls)
"nfsd: client %s failed to respond to layout recall. " "nfsd: client %s failed to respond to layout recall. "
" Fencing..\n", addr_str); " Fencing..\n", addr_str);
argv[0] = "/sbin/nfsd-recall-failed"; argv[0] = (char *)nfsd_recall_failed;
argv[1] = addr_str; argv[1] = addr_str;
argv[2] = ls->ls_file->f_path.mnt->mnt_sb->s_id; argv[2] = ls->ls_file->f_path.mnt->mnt_sb->s_id;
argv[3] = NULL; argv[3] = NULL;
error = call_usermodehelper(argv[0], argv, envp, UMH_WAIT_PROC); error = call_usermodehelper(nfsd_recall_failed, argv, envp,
UMH_WAIT_PROC);
if (error) { if (error) {
printk(KERN_ERR "nfsd: fence failed for client %s: %d!\n", printk(KERN_ERR "nfsd: fence failed for client %s: %d!\n",
addr_str, error); addr_str, error);
......
...@@ -72,7 +72,7 @@ static void umh_keys_cleanup(struct subprocess_info *info) ...@@ -72,7 +72,7 @@ static void umh_keys_cleanup(struct subprocess_info *info)
/* /*
* Call a usermode helper with a specific session keyring. * Call a usermode helper with a specific session keyring.
*/ */
static int call_usermodehelper_keys(char *path, char **argv, char **envp, static int call_usermodehelper_keys(const char *path, char **argv, char **envp,
struct key *session_keyring, int wait) struct key *session_keyring, int wait)
{ {
struct subprocess_info *info; struct subprocess_info *info;
...@@ -95,6 +95,7 @@ static int call_sbin_request_key(struct key_construction *cons, ...@@ -95,6 +95,7 @@ static int call_sbin_request_key(struct key_construction *cons,
const char *op, const char *op,
void *aux) void *aux)
{ {
static char const request_key[] = "/sbin/request-key";
const struct cred *cred = current_cred(); const struct cred *cred = current_cred();
key_serial_t prkey, sskey; key_serial_t prkey, sskey;
struct key *key = cons->key, *authkey = cons->authkey, *keyring, struct key *key = cons->key, *authkey = cons->authkey, *keyring,
...@@ -161,7 +162,7 @@ static int call_sbin_request_key(struct key_construction *cons, ...@@ -161,7 +162,7 @@ static int call_sbin_request_key(struct key_construction *cons,
/* set up the argument list */ /* set up the argument list */
i = 0; i = 0;
argv[i++] = "/sbin/request-key"; argv[i++] = (char *)request_key;
argv[i++] = (char *) op; argv[i++] = (char *) op;
argv[i++] = key_str; argv[i++] = key_str;
argv[i++] = uid_str; argv[i++] = uid_str;
...@@ -172,7 +173,7 @@ static int call_sbin_request_key(struct key_construction *cons, ...@@ -172,7 +173,7 @@ static int call_sbin_request_key(struct key_construction *cons,
argv[i] = NULL; argv[i] = NULL;
/* do it */ /* do it */
ret = call_usermodehelper_keys(argv[0], argv, envp, keyring, ret = call_usermodehelper_keys(request_key, argv, envp, keyring,
UMH_WAIT_PROC); UMH_WAIT_PROC);
kdebug("usermode -> 0x%x", ret); kdebug("usermode -> 0x%x", ret);
if (ret >= 0) { if (ret >= 0) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment