Message ID | 20190322154425.3852517-2-arnd@arndb.de |
---|---|
State | New |
Headers | show |
Series | [BACKPORT,4.4.y,01/25] mmc: pwrseq: constify mmc_pwrseq_ops structures | expand |
On Tue, Mar 26, 2019 at 2:22 AM Greg KH <gregkh@linuxfoundation.org> wrote: > On Fri, Mar 22, 2019 at 04:43:52PM +0100, Arnd Bergmann wrote: > > } > > > > -static struct mmc_pwrseq_ops mmc_pwrseq_simple_ops = { > > +static const struct mmc_pwrseq_ops mmc_pwrseq_simple_ops = { > > .pre_power_on = mmc_pwrseq_simple_pre_power_on, > > .post_power_on = mmc_pwrseq_simple_post_power_on, > > .power_off = mmc_pwrseq_simple_power_off, > > Why is this needed for a stable patch? It doesn't fix a bug, it just > looks like it is a "nice thing" to have, right? I don't think any later > patch in this series relies it it, or am I missing something? Right, the benefit here is rather small. In theory, any structure of function pointers is a place into which an exploit can be placed in case someone finds a way to modify a few bytes of kernel memory. Placing the structures in read-only memory make this a little harder (it doesn't prevent rowhammer attacks though). Dropping this patch is certainly fine with me, as we have a large supply of other structure definitions like this, and we wont' get close to plugging enough of them in stable kernels. Arnd
diff --git a/drivers/mmc/core/pwrseq.h b/drivers/mmc/core/pwrseq.h index 096da48c6a7e..133de0426687 100644 --- a/drivers/mmc/core/pwrseq.h +++ b/drivers/mmc/core/pwrseq.h @@ -16,7 +16,7 @@ struct mmc_pwrseq_ops { }; struct mmc_pwrseq { - struct mmc_pwrseq_ops *ops; + const struct mmc_pwrseq_ops *ops; }; #ifdef CONFIG_OF diff --git a/drivers/mmc/core/pwrseq_emmc.c b/drivers/mmc/core/pwrseq_emmc.c index ad4f94ec7e8d..4a82bc77fe49 100644 --- a/drivers/mmc/core/pwrseq_emmc.c +++ b/drivers/mmc/core/pwrseq_emmc.c @@ -51,7 +51,7 @@ static void mmc_pwrseq_emmc_free(struct mmc_host *host) kfree(pwrseq); } -static struct mmc_pwrseq_ops mmc_pwrseq_emmc_ops = { +static const struct mmc_pwrseq_ops mmc_pwrseq_emmc_ops = { .post_power_on = mmc_pwrseq_emmc_reset, .free = mmc_pwrseq_emmc_free, }; diff --git a/drivers/mmc/core/pwrseq_simple.c b/drivers/mmc/core/pwrseq_simple.c index d10538bb5e07..2b16263458af 100644 --- a/drivers/mmc/core/pwrseq_simple.c +++ b/drivers/mmc/core/pwrseq_simple.c @@ -87,7 +87,7 @@ static void mmc_pwrseq_simple_free(struct mmc_host *host) kfree(pwrseq); } -static struct mmc_pwrseq_ops mmc_pwrseq_simple_ops = { +static const struct mmc_pwrseq_ops mmc_pwrseq_simple_ops = { .pre_power_on = mmc_pwrseq_simple_pre_power_on, .post_power_on = mmc_pwrseq_simple_post_power_on, .power_off = mmc_pwrseq_simple_power_off,