Bug 2213277 - stratisd invocation of CryptContextHandle::format() allows undefined behavior
Summary: stratisd invocation of CryptContextHandle::format() allows undefined behavior
Keywords:
Status: VERIFIED
Alias: None
Product: Red Hat Enterprise Linux 9
Classification: Red Hat
Component: stratisd
Version: 9.2
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: rc
: ---
Assignee: Bryan Gurney
QA Contact: Filip Suba
URL:
Whiteboard:
Depends On:
Blocks:
TreeView+ depends on / blocked
 
Reported: 2023-06-07 17:37 UTC by Bryan Gurney
Modified: 2023-08-14 11:33 UTC (History)
3 users (show)

Fixed In Version: stratisd-3.5.7-1.el9
Doc Type: If docs needed, set a value
Doc Text:
Clone Of:
Environment:
Last Closed:
Type: Bug
Target Upstream Version:
Embargoed:


Attachments (Terms of Use)


Links
System ID Private Priority Status Summary Last Updated
Red Hat Issue Tracker RHELPLAN-159210 0 None None None 2023-06-07 17:52:48 UTC

Description Bryan Gurney 2023-06-07 17:37:16 UTC
Description of problem:
The libcryptsetup-rs library's external API allows
clients to invoke the CryptContextHandle::format() and some other
methods while passing a parameter in a way that could result in
undefined behavior. This undefined behavior was first made evident by
the Rust 1.70 toolchain and has only been observed when
libcryptsetup-rs is compiled with the Rust 1.70 toolchain. Since
stratisd invokes the forrmat() method in a way that allows this
undefined  behavior ,all stratisd invocations of the format() method
may fail with an EINVAL, so that stratisd is unable to format
encrypted devices and consequently unable to create encrypted pools.

Version-Release number of selected component (if applicable):
stratisd-3.5.5-1.el9

How reproducible:
Likely 100%

Steps to Reproduce:
1. Build stratisd with Rust 1.70. The current released version of
stratisd will not demonstrate the error because that release was
packaged using a prior Rust version.

2. Create an encrypted pool using stratis-cli
3. The pool is not created; an error is returned.

Actual results:
The pool is not created and an error is returned.

Expected results:
The pool is created without an error.

Additional info:
stratisd 3.5.7 fixes the problem by requiring libcryptsetup-rs 0.8.0
which removes the undefined behavior in the format() method.

Comment 1 Bryan Gurney 2023-06-08 19:16:41 UTC
Posted CentOS Stream merge request:
https://gitlab.com/redhat/centos-stream/rpms/stratisd/-/merge_requests/21

Comment 4 Filip Suba 2023-07-03 08:24:44 UTC
Verified with stratisd-3.5.7-1.el9.


Note You need to log in before you can comment on or make changes to this bug.