Re: [PATCH v3] proc/sysctl: add shared variables for range check

From: Matthew Wilcox
Date: Thu Apr 18 2019 - 21:07:17 EST


On Fri, Apr 19, 2019 at 09:17:17AM +0900, Matteo Croce wrote:
> > extern const int sysctl_zero;
> > /* comment goes here */
> > #define SYSCTL_ZERO ((void *)&sysctl_zero)
> >
> > and then use SYSCTL_ZERO everywhere. That centralizes the ugliness
> > and
> > makes it easier to switch over if/when extra1&2 are constified.
> >
> > But it's all a bit sad and lame :(
>
> No, we didn't decide yet. I need to check for all extra1,2 assignment. Not an impossible task, anyway.
>
> I agree that the casts are ugly. Your suggested macro moves the ugliness in a single point, which is good. Or maybe we can do a single macro like:
>
> #define SYSCTL_VAL(x) ((void *)&sysctl_##x)
>
> to avoid defining one for every value. And when we decide that everything can be const, we just update the macro.

If we're going to do that, we can save two EXPORTs and do:

const int sysctl_vals[] = { 0, 1, -1 };
EXPORT_SYMBOL(sysctl_vals);

#define SYSCTL_ZERO ((void *)&sysctl_vals[0])