Fix str_open() in a different way

The original patch tried to fix it by not assigning anything to
open_mode. That only works if the compiler is able to deduce that bug()
will abort the process however (or just not warn about the uninitialized
use of open_mode). clang does warn about open_mode being used
uninitialized in this function.

Solve this by rewriting the function to simply only consider one case,
the mode == kVSFSysStrOpenReadOnly one. Otherwise, don't call
vsf_sysutil_open_file() and just return -1 after calling bug().
This commit is contained in:
Timm Bäder 2020-11-17 10:16:57 +01:00
parent a745964126
commit a93b3655b0
3 changed files with 29 additions and 34 deletions

View File

@ -1,33 +0,0 @@
From 8882c5f7788fc2ea7cae824a7fa09b82782fc81e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ond=C5=99ej=20Lyson=C4=9Bk?= <olysonek@redhat.com>
Date: Fri, 7 Feb 2020 11:51:46 +0100
Subject: [PATCH] Fix assignment of an enumerator of a different type
The kVSFSysStrOpenUnknown enumerator is not part of the
EVSFSysUtilOpenMode enum. The assignment causes a build failure with
gcc 10.
The open_mode variable need not be initialized, because the switch
statement either sets the variable or causes us to exit.
Resolves: rhbz#1800239
---
sysstr.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/sysstr.c b/sysstr.c
index d86cdf1..ff2671b 100644
--- a/sysstr.c
+++ b/sysstr.c
@@ -74,7 +74,7 @@ str_chdir(const struct mystr* p_str)
int
str_open(const struct mystr* p_str, const enum EVSFSysStrOpenMode mode)
{
- enum EVSFSysUtilOpenMode open_mode = kVSFSysStrOpenUnknown;
+ enum EVSFSysUtilOpenMode open_mode;
switch (mode)
{
case kVSFSysStrOpenReadOnly:
--
2.24.1

28
fix-str_open.patch Normal file
View File

@ -0,0 +1,28 @@
diff -ruN vsftpd-3.0.3.orig/sysstr.c vsftpd-3.0.3/sysstr.c
--- vsftpd-3.0.3.orig/sysstr.c 2020-11-17 09:47:03.872923383 +0100
+++ vsftpd-3.0.3/sysstr.c 2020-11-17 09:48:41.219754145 +0100
@@ -74,19 +74,11 @@
int
str_open(const struct mystr* p_str, const enum EVSFSysStrOpenMode mode)
{
- enum EVSFSysUtilOpenMode open_mode = kVSFSysStrOpenUnknown;
- switch (mode)
- {
- case kVSFSysStrOpenReadOnly:
- open_mode = kVSFSysUtilOpenReadOnly;
- break;
- case kVSFSysStrOpenUnknown:
- /* Fall through */
- default:
- bug("unknown mode value in str_open");
- break;
- }
- return vsf_sysutil_open_file(str_getbuf(p_str), open_mode);
+ if (mode == kVSFSysStrOpenReadOnly)
+ return vsf_sysutil_open_file(str_getbuf(p_str), kVSFSysUtilOpenReadOnly);
+
+ bug("unknown mode value in str_open");
+ return -1;
}
int

View File

@ -92,10 +92,10 @@ Patch62: 0002-Prevent-recursion-in-bug.patch
Patch63: 0001-Set-s_uwtmp_inserted-only-after-record-insertion-rem.patch
Patch64: 0002-Repeat-pututxline-if-it-fails-with-EINTR.patch
Patch65: 0001-Repeat-pututxline-until-it-succeeds-if-it-fails-with.patch
Patch66: 0001-Fix-assignment-of-an-enumerator-of-a-different-type.patch
Patch67: 0001-Fix-timestamp-handling-in-MDTM.patch
Patch68: 0002-Drop-an-unused-global-variable.patch
Patch69: 0001-Remove-a-hint-about-the-ftp_home_dir-SELinux-boolean.patch
Patch70: fix-str_open.patch
%description
vsftpd is a Very Secure FTP daemon. It was written completely from