Skip to content

Commit 089524c

Browse files
committed
Correct OpenOptions::security_qos_flags documentation
1 parent 503e74e commit 089524c

File tree

1 file changed

+20
-6
lines changed
  • src/libstd/sys/windows/ext

1 file changed

+20
-6
lines changed

src/libstd/sys/windows/ext/fs.rs

+20-6
Original file line numberDiff line numberDiff line change
@@ -220,13 +220,27 @@ pub trait OpenOptionsExt {
220220
/// the specified value (or combines it with `custom_flags` and `attributes`
221221
/// to set the `dwFlagsAndAttributes` for [`CreateFile`]).
222222
///
223-
/// By default, `security_qos_flags` is set to `SECURITY_ANONYMOUS`. For
224-
/// information about possible values, see [Impersonation Levels] on the
225-
/// Windows Dev Center site.
226-
///
223+
/// By default `security_qos_flags` is not set. It should be specified when
224+
/// opening a named pipe, to control to which degree a server process can
225+
/// act on behalf of a client process (security impersonation level).
226+
///
227+
/// When `security_qos_flags` is not set a malicious program can gain the
228+
/// elevated privileges of a privileged Rust process when it allows opening
229+
/// user-specified paths, by tricking it into opening a named pipe. So
230+
/// arguably `security_qos_flags` should also be set when opening arbitrary
231+
/// paths. However the bits can then conflict with other flags, specifically
232+
/// `FILE_FLAG_OPEN_NO_RECALL`.
233+
///
234+
/// For information about possible values, see [Impersonation Levels] on the
235+
/// Windows Dev Center site. The `SECURITY_SQOS_PRESENT` flag is set
236+
/// automatically when using this method.
237+
227238
/// # Examples
228239
///
229240
/// ```no_run
241+
/// # #[cfg(for_demonstration_only)]
242+
/// extern crate winapi;
243+
/// # mod winapi { pub const SECURITY_IDENTIFICATION: u32 = 0; }
230244
/// use std::fs::OpenOptions;
231245
/// use std::os::windows::prelude::*;
232246
///
@@ -235,9 +249,9 @@ pub trait OpenOptionsExt {
235249
/// .create(true)
236250
///
237251
/// // Sets the flag value to `SecurityIdentification`.
238-
/// .security_qos_flags(1)
252+
/// .security_qos_flags(winapi::SECURITY_IDENTIFICATION)
239253
///
240-
/// .open("foo.txt");
254+
/// .open(r"\\.\pipe\MyPipe");
241255
/// ```
242256
///
243257
/// [`CreateFile`]: https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858.aspx

0 commit comments

Comments
 (0)