Re: [PATCH] s390: Warn if kernel command line contains non-printable EBCDIC characters
Heiko Carstens <[email protected]>
| Newsgroups | org.kernel.vger.linux-s390,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
On Tue, Aug 25, 2026 at 05:08:08PM +0200, Ilya Leoshkevich wrote: > Users may accidentally add multi-byte UTF-8 characters to zipl.conf > parmline, for example, by copying snippets containing non-breaking > spaces (\xC2\xA0) from web pages. > > The kernel will then interpret the entire command line as EBCDIC, > making it unusable. Distinguish this situation from the legitimate > EBCDIC conversion by looking for non-printable characters and issue > a warning. > > Signed-off-by: Ilya Leoshkevich <[email protected]> > --- > arch/s390/boot/ipl_parm.c | 19 ++++++++++++++++++- > 1 file changed, 18 insertions(+), 1 deletion(-) > > diff --git a/arch/s390/boot/ipl_parm.c b/arch/s390/boot/ipl_parm.c > index 6bc950b92be76..71c0c26d56bba 100644 > --- a/arch/s390/boot/ipl_parm.c > +++ b/arch/s390/boot/ipl_parm.c > @@ -173,12 +173,29 @@ static inline int has_ebcdic_char(const char *str) > return 0; > } > > +static inline int has_nonprintable_char(const char *str) > +{ > + int i; > + > + for (i = 0; str[i]; i++) { > + unsigned char c = (unsigned char)str[i]; > + > + /* isprint() is Latin-1, and we need ASCII here */ > + if (c < 0x20 || c > 0x7e) > + return 1; Hm, I guess the comment refers to a different implementation than the kernel internal one? Since isprint() (see include/linux/ctype.h) is true for exactly the range you open-coded, as far as I can tell. Furthermore kernel command line parsing also allows for all sorts of spaces, tabs, and line feeds (see e.g. next_arg()). So I guess the above should be changed (and shortened :) ) to something like: static inline int has_nonprintable_char(const char *str) { for (int i = 0; str[i]; i++) { if (isprint(str[i]) || isspace(str[i])) return 1; } return 0; }