-/* $OpenBSD: authfile.c,v 1.150 2026/06/14 03:59:34 djm Exp $ */
+/* $OpenBSD: authfile.c,v 1.151 2026/06/29 09:14:25 djm Exp $ */
/*
* Copyright (c) 2000, 2013 Markus Friedl. All rights reserved.
*
char *line = NULL, *cp;
size_t linesize = 0;
int r;
+ struct stat st;
struct sshkey *k = NULL;
if (kp == NULL)
*commentp = NULL;
if ((f = fopen(filename, "r")) == NULL)
return SSH_ERR_SYSTEM_ERROR;
+ if (stat(filename, &st) == 0 && S_ISREG(st.st_mode) &&
+ st.st_size > SSHBUF_SIZE_MAX) {
+ fclose(f);
+ return SSH_ERR_INVALID_FORMAT;
+ }
if ((k = sshkey_new(KEY_UNSPEC)) == NULL) {
fclose(f);
return SSH_ERR_ALLOC_FAIL;
-/* $OpenBSD: sshbuf-io.c,v 1.2 2020/01/25 23:28:06 djm Exp $ */
+/* $OpenBSD: sshbuf-io.c,v 1.3 2026/06/29 09:14:25 djm Exp $ */
/*
* Copyright (c) 2011 Damien Miller
*
if (fstat(fd, &st) == -1)
return SSH_ERR_SYSTEM_ERROR;
- if ((st.st_mode & (S_IFSOCK|S_IFCHR|S_IFIFO)) == 0 &&
- st.st_size > SSHBUF_SIZE_MAX)
+ if (S_ISREG(st.st_mode) && st.st_size > SSHBUF_SIZE_MAX)
return SSH_ERR_INVALID_FORMAT;
if ((blob = sshbuf_new()) == NULL)
return SSH_ERR_ALLOC_FAIL;
goto out;
}
}
- if ((st.st_mode & (S_IFSOCK|S_IFCHR|S_IFIFO)) == 0 &&
+ if (S_ISREG(st.st_mode) == 0 &&
st.st_size != (off_t)sshbuf_len(blob)) {
r = SSH_ERR_FILE_CHANGED;
goto out;