> On June 9, 2017, 9:28 p.m., Jie Yu wrote:
> > src/slave/containerizer/mesos/isolators/linux/capabilities.cpp
> > Lines 99-103 (patched)
> > <https://reviews.apache.org/r/59552/diff/2/?file=1741704#file1741704line101>
> >
> >     In fact, i think the semantics should be:
> >     
> >     1) treat framework specificied capabilities as effective capabilities.
> >     2) in the future, allow frameworks to set bounding capabilities
> >     3) if effective capabilities is set and bounding capabilities is not 
> > set, set bounding set to be the same as effective set (instead of 
> > "unbounded"). This matches the existing semantics.
> >     4) treat operator flags as the default values if the framework does not 
> > specify them (for both bounding and effective capabilities).
> >     5) if both effective and bounding capabilities are set, make sure the 
> > effective is a subset of bounding
> >     6) if effective capabilities is not set, but bounding capabilities is 
> > set, set effective capabilities to be the same as bounding capabilities
> >     
> >     Given that, I'd adjust the logic of this function to the following:
> >     
> >     ```
> >     Option<CapabilityInfo> effective;
> >     Option<CapabilityInfo> bounding;
> >     
> >     if (containerConfig.has_container_info() &&
> >         containerConfig.container_info().has_linux_info() &&
> >         
> > containerConfig.container_info().linux_info().has_capability_info()) {
> >       effective = 
> > containerConfig.container_info().linux_info().capability_info();
> >     }
> >     
> >     // Framework can override the effective capabilities.
> >     if (effective.isNone() && flags.effective_capabilities.isSome()) {
> >       effective = flags.effective_capabilities.get();
> >     }
> >     
> >     if (flags.bounding_capabilities.isSome()) {
> >       bounding = flags.bounding_capabilities.get();
> >     }
> >     
> >     if (effective.isSome() && bounding.isSome()) {
> >       // Validate that effective is a subset of bounding.
> >     }
> >     
> >     if (effective.isSome() && bounding.isNone()) {
> >       bounding = effective.get();
> >     }
> >     
> >     if (effective.isNone() && bounding.isSome()) {
> >       effective = bounding.get();
> >     }
> >     
> >     ...
> >     ```
> >     
> >     The above logic is a bit easier to follow, comparing putting some logic 
> > in `mergeCapabilities`. I'll just kill `mergeCapabilities` function.

Thinking some more about this one :)


> On June 9, 2017, 9:28 p.m., Jie Yu wrote:
> > src/slave/containerizer/mesos/launch.cpp
> > Line 456 (original), 456-457 (patched)
> > <https://reviews.apache.org/r/59552/diff/2/?file=1741705#file1741705line456>
> >
> >     We probably should have a CHECK (or comment) here. both of them are 
> > either set, or either not set. Maybe add a comment in the flags as well.

The effective and bounding capabilities are currently allowed to vary (see 
below).


> On June 9, 2017, 9:28 p.m., Jie Yu wrote:
> > src/slave/containerizer/mesos/launch.cpp
> > Lines 627 (patched)
> > <https://reviews.apache.org/r/59552/diff/2/?file=1741705#file1741705line627>
> >
> >     Since two flags are either both set or both not set. I would simply 
> > check both are isSome() here.

They are actually allowed to vary. If the neither the framework nor the 
operator specified effective capabilities, then 
`launchInfo.has_effective_capabilities()` would be false but 
`launchInfo.has_bounding_capabilities()` could still be true.


- James


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/59552/#review176530
-----------------------------------------------------------


On June 5, 2017, 4:36 p.m., James Peach wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/59552/
> -----------------------------------------------------------
> 
> (Updated June 5, 2017, 4:36 p.m.)
> 
> 
> Review request for mesos, Jie Yu and Jiang Yan Xu.
> 
> 
> Bugs: MESOS-7476
>     https://issues.apache.org/jira/browse/MESOS-7476
> 
> 
> Repository: mesos
> 
> 
> Description
> -------
> 
> The linux/capabilities isolator implements the `--allowed_capabilities`
> option by granting all the allowed capabilities. This change explicitly
> populates the only the bounding capabilities in the case where
> `--bounding_capabilities` has been set but the task itself has not been
> granted any effective capabilities. This improves the security of tasks
> since it is now possible to configure the bounding set without actually
> granting privilege to the task.
> 
> 
> Diffs
> -----
> 
>   src/slave/containerizer/mesos/isolators/linux/capabilities.cpp 
> 60d22aa877c1ab62a08222e5efe8800e337684da 
>   src/slave/containerizer/mesos/launch.cpp 
> f48d294a0a832dfe248c4a83849ee5a63cb76bce 
>   src/tests/containerizer/linux_capabilities_isolator_tests.cpp 
> 40376a03fdb8f931f8d3f83b1c3fa6207e02c1d1 
> 
> 
> Diff: https://reviews.apache.org/r/59552/diff/2/
> 
> 
> Testing
> -------
> 
> make check (Fedora 25)
> 
> 
> Thanks,
> 
> James Peach
> 
>

Reply via email to