Re: [PATCH net] mpls: fix af_mpls dependencies

From: Randy Dunlap
Date: Tue Jun 11 2019 - 22:44:53 EST


On 6/11/19 5:08 PM, Matteo Croce wrote:
> On Wed, Jun 12, 2019 at 1:07 AM Randy Dunlap <rdunlap@xxxxxxxxxxxxx> wrote:
>>
>> On 6/9/19 7:57 PM, David Miller wrote:
>>> From: Matteo Croce <mcroce@xxxxxxxxxx>
>>> Date: Sat, 8 Jun 2019 14:50:19 +0200
>>>
>>>> MPLS routing code relies on sysctl to work, so let it select PROC_SYSCTL.
>>>>
>>>> Reported-by: Randy Dunlap <rdunlap@xxxxxxxxxxxxx>
>>>> Suggested-by: David Ahern <dsahern@xxxxxxxxx>
>>>> Signed-off-by: Matteo Croce <mcroce@xxxxxxxxxx>
>>>
>>> Applied, thanks.
>>>
>>
>> This patch causes build errors when
>> # CONFIG_PROC_FS is not set
>> because PROC_SYSCTL depends on PROC_FS. The build errors are not
>> in fs/proc/ but in other places in the kernel that never expect to see
>> PROC_FS not set but PROC_SYSCTL=y.
>>
>
> Hi,
>
> Maybe I'm missing something, if PROC_SYSCTL depends on PROC_FS, how is
> possible to have PROC_FS not set but PROC_SYSCTL=y?

When MPLS=y and MPLS_ROUTING=[y|m], MPLS_ROUTING selects PROC_SYSCTL.
That enables PROC_SYSCTL, whether PROC_FS is set/enabled or not.

There is a warning about this in Documentation/kbuild/kconfig-language.rst:

Note:
select should be used with care. select will force
a symbol to a value without visiting the dependencies.
By abusing select you are able to select a symbol FOO even
if FOO depends on BAR that is not set.
In general use select only for non-visible symbols
(no prompts anywhere) and for symbols with no dependencies.
That will limit the usefulness but on the other hand avoid
the illegal configurations all over.


> I tried it by manually editing .config. but make oldconfig warns:
>
> WARNING: unmet direct dependencies detected for PROC_SYSCTL
> Depends on [n]: PROC_FS [=n]
> Selected by [m]:
> - MPLS_ROUTING [=m] && NET [=y] && MPLS [=y] && (NET_IP_TUNNEL [=n]
> || NET_IP_TUNNEL [=n]=n)

Yes, I get this also.

> *
> * Restart config...
> *
> *
> * Configure standard kernel features (expert users)
> *
> Configure standard kernel features (expert users) (EXPERT) [Y/?] y
> Multiple users, groups and capabilities support (MULTIUSER) [Y/n/?] y
> sgetmask/ssetmask syscalls support (SGETMASK_SYSCALL) [N/y/?] n
> Sysfs syscall support (SYSFS_SYSCALL) [N/y/?] n
> Sysctl syscall support (SYSCTL_SYSCALL) [N/y/?] (NEW)

So I still say that MPLS_ROUTING should depend on PROC_SYSCTL,
not select it.

--
~Randy