forked from pool/systemd
46 lines
1.5 KiB
Diff
46 lines
1.5 KiB
Diff
From f901aaadd68050bc575c1c15b84f8f31fd4d494d Mon Sep 17 00:00:00 2001
|
|
From: Tom Gundersen <teg@jklm.no>
|
|
Date: Thu, 18 Sep 2014 19:16:54 +0200
|
|
Subject: [PATCH] udevadm: hwdb - check return value of fseeko()
|
|
|
|
Fonud by Coverity. Fixes CID #996255.
|
|
---
|
|
src/udev/udevadm-hwdb.c | 14 ++++++++++++--
|
|
1 file changed, 12 insertions(+), 2 deletions(-)
|
|
|
|
diff --git src/udev/udevadm-hwdb.c src/udev/udevadm-hwdb.c
|
|
index 65cbf61..64273fb 100644
|
|
--- src/udev/udevadm-hwdb.c
|
|
+++ src/udev/udevadm-hwdb.c
|
|
@@ -365,7 +365,12 @@ static int trie_store(struct trie *trie, const char *filename) {
|
|
fchmod(fileno(t.f), 0444);
|
|
|
|
/* write nodes */
|
|
- fseeko(t.f, sizeof(struct trie_header_f), SEEK_SET);
|
|
+ err = fseeko(t.f, sizeof(struct trie_header_f), SEEK_SET);
|
|
+ if (err < 0) {
|
|
+ fclose(t.f);
|
|
+ unlink_noerrno(filename_tmp);
|
|
+ return -errno;
|
|
+ }
|
|
root_off = trie_store_nodes(&t, trie->root);
|
|
h.nodes_root_off = htole64(root_off);
|
|
pos = ftello(t.f);
|
|
@@ -378,7 +383,12 @@ static int trie_store(struct trie *trie, const char *filename) {
|
|
/* write header */
|
|
size = ftello(t.f);
|
|
h.file_size = htole64(size);
|
|
- fseeko(t.f, 0, SEEK_SET);
|
|
+ err = fseeko(t.f, 0, SEEK_SET);
|
|
+ if (err < 0) {
|
|
+ fclose(t.f);
|
|
+ unlink_noerrno(filename_tmp);
|
|
+ return -errno;
|
|
+ }
|
|
fwrite(&h, sizeof(struct trie_header_f), 1, t.f);
|
|
err = ferror(t.f);
|
|
if (err)
|
|
--
|
|
1.7.9.2
|
|
|