View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000688 | bareos-core | file daemon | public | 2016-08-12 17:55 | 2019-12-18 15:25 |
Reporter | sobolev | Assigned To | mvwieringen | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Platform | Linux x86 | OS | OpenSUSE | OS Version | 13.1 |
Product Version | 14.2.7 | ||||
Fixed in Version | 15.2.5 | ||||
Summary | 0000688: "select files by size" feature - ssize_t type overflow on Linux x86 | ||||
Description | Integer overflow in src/findlib/find_one.c:check_size_matching(JCR *jcr, FF_PKT *ff_pkt) ssize_t in 32-bit linux is int_32 Patch attached. | ||||
Steps To Reproduce | 1. Install bareos-filedaemon on 32-bit linux client (OpenSUSE 13.1) 2. Create 3 test files on client # ls -lh total 3.6G -rw-r--r-- 1 root root 100M Aug 12 15:47 test100 -rw-r--r-- 1 root root 3.0G Aug 12 15:57 test3000 -rw-r--r-- 1 root root 500M Aug 12 15:48 test500 3. Create test fileset FileSet { Name = "Test" Include { Options { size = <200Mb } File = /home } } 4. Run backup job Result: test100 and test3000 backed up. test500 doesn't. | ||||
Tags | No tags attached. | ||||
bareos-size-option.patch (1,504 bytes)
diff -urN bareos.orig/src/findlib/find_one.c bareos/src/findlib/find_one.c --- bareos.orig/src/findlib/find_one.c 2016-08-09 19:39:21.000000000 +0300 +++ bareos/src/findlib/find_one.c 2016-08-12 17:40:05.181524759 +0300 @@ -217,7 +217,7 @@ */ static inline bool check_size_matching(JCR *jcr, FF_PKT *ff_pkt) { - ssize_t begin_size, end_size, difference; + int64_t begin_size, end_size, difference; /* * See if size matching is turned on. @@ -242,7 +242,7 @@ /* * Calculate the fraction this size is of the wanted size. */ - if ((ssize_t)ff_pkt->statp.st_size > begin_size) { + if ((int64_t)ff_pkt->statp.st_size > begin_size) { difference = ff_pkt->statp.st_size - begin_size; } else { difference = begin_size - ff_pkt->statp.st_size; @@ -253,12 +253,12 @@ */ return (difference < (begin_size / 100)); case size_match_smaller: - return (ssize_t)ff_pkt->statp.st_size < begin_size; + return (int64_t)ff_pkt->statp.st_size < begin_size; case size_match_greater: - return (ssize_t)ff_pkt->statp.st_size > begin_size; + return (int64_t)ff_pkt->statp.st_size > begin_size; case size_match_range: - return ((ssize_t)ff_pkt->statp.st_size >= begin_size) && - ((ssize_t)ff_pkt->statp.st_size <= end_size); + return ((int64_t)ff_pkt->statp.st_size >= begin_size) && + ((int64_t)ff_pkt->statp.st_size <= end_size); default: return true; } |
|
bareos: bareos-15.2 df4a2475 2016-08-12 21:10 Committer: mvwieringen Ported: N/A Details Diff |
select files by size feature - ssize_t overflow for 32 bits Integer overflow in src/findlib/find_one.c:check_size_matching() ssize_t in 32-bit linux is int_32. Signed-off-by: Marco van Wieringen <marco.van.wieringen@bareos.com> |
Affected Issues 0000688 |
|
mod - src/findlib/find_one.c | Diff File |
Date Modified | Username | Field | Change |
---|---|---|---|
2016-08-12 17:55 | sobolev | New Issue | |
2016-08-12 17:55 | sobolev | File Added: bareos-size-option.patch | |
2016-08-12 19:12 | mvwieringen | Status | new => confirmed |
2016-08-20 09:20 | mvwieringen | Changeset attached | => bareos bareos-15.2 df4a2475 |
2016-08-20 09:21 | mvwieringen | Status | confirmed => resolved |
2016-08-20 09:21 | mvwieringen | Fixed in Version | => 15.2.5 |
2016-08-20 09:21 | mvwieringen | Resolution | open => fixed |
2016-08-20 09:21 | mvwieringen | Assigned To | => mvwieringen |
2019-12-18 15:25 | arogge | Status | resolved => closed |