tree:
https://git.kernel.org/pub/scm/linux/kernel/git/sashal/linux-stable.git
queue-4.14
head: 688906fda2ad214f58200cf0a3533b952750e3aa
commit: 688906fda2ad214f58200cf0a3533b952750e3aa [2/2] f2fs: use EINVAL for superblock
with invalid magic
reproduce:
# apt-get install sparse
# sparse version: v0.6.1-rc1-43-g0ccb3b4-dirty
git checkout 688906fda2ad214f58200cf0a3533b952750e3aa
make ARCH=x86_64 allmodconfig
make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp(a)intel.com>
sparse warnings: (new ones prefixed by >>)
fs/f2fs/super.c:1528:5: sparse: sparse: symbol 'f2fs_get_projid' was not
declared. Should it be static?
> fs/f2fs/super.c:1819:25: sparse: sparse: incorrect type in
argument 3 (different base types) @@ expected char const *[addressable] fmt @@ got
ddressable] fmt @@
> fs/f2fs/super.c:1819:25: sparse: expected char const *[addressable] fmt
> fs/f2fs/super.c:1819:25: sparse: got unsigned int
fs/f2fs/super.c:658:35:
sparse: sparse: context imbalance in 'f2fs_drop_inode' - unexpected unlock
In file included from fs/f2fs/f2fs.h:19:0,
from fs/f2fs/super.c:30:
fs/f2fs/super.c: In function 'sanity_check_raw_super':
include/uapi/linux/magic.h:28:26: warning: passing argument 3 of 'f2fs_msg'
makes pointer from integer without a cast [-Wint-conversion]
#define F2FS_SUPER_MAGIC 0xF2F52010
^
fs/f2fs/super.c:1819:4: note: in expansion of macro 'F2FS_SUPER_MAGIC'
F2FS_SUPER_MAGIC, le32_to_cpu(raw_super->magic));
^~~~~~~~~~~~~~~~
fs/f2fs/super.c:177:6: note: expected 'const char *' but argument is of type
'unsigned int'
void f2fs_msg(struct super_block *sb, const char *level, const char *fmt, ...)
^~~~~~~~
vim +1819 fs/f2fs/super.c
9a59b62fd88196 Chao Yu 2015-12-15 1806
df728b0f6954c3 Jaegeuk Kim 2016-03-23 1807 static int
sanity_check_raw_super(struct f2fs_sb_info *sbi,
fd694733d523df Jaegeuk Kim 2016-03-20 1808 struct buffer_head *bh)
aff063e266cbf4 Jaegeuk Kim 2012-11-02 1809 {
e60b97231950fb Jaegeuk Kim 2018-04-27 1810 block_t segment_count, segs_per_sec,
secs_per_zone;
e60b97231950fb Jaegeuk Kim 2018-04-27 1811 block_t total_sections,
blocks_per_seg;
fd694733d523df Jaegeuk Kim 2016-03-20 1812 struct f2fs_super_block *raw_super =
(struct f2fs_super_block *)
fd694733d523df Jaegeuk Kim 2016-03-20 1813 (bh->b_data +
F2FS_SUPER_OFFSET);
df728b0f6954c3 Jaegeuk Kim 2016-03-23 1814 struct super_block *sb =
sbi->sb;
aff063e266cbf4 Jaegeuk Kim 2012-11-02 1815 unsigned int blocksize;
aff063e266cbf4 Jaegeuk Kim 2012-11-02 1816
688906fda2ad21 Icenowy Zheng 2019-07-25 1817 if (le32_to_cpu(raw_super->magic)
!= F2FS_SUPER_MAGIC) {
688906fda2ad21 Icenowy Zheng 2019-07-25 1818 f2fs_msg(sb, "Magic Mismatch,
valid(0x%x) - read(0x%x)",
a07ef784356cf9 Namjae Jeon 2012-12-30 @1819 F2FS_SUPER_MAGIC,
le32_to_cpu(raw_super->magic));
688906fda2ad21 Icenowy Zheng 2019-07-25 1820 return -EINVAL;
a07ef784356cf9 Namjae Jeon 2012-12-30 1821 }
aff063e266cbf4 Jaegeuk Kim 2012-11-02 1822
5c9b469295fb6b majianpeng 2013-02-01 1823 /* Currently, support only 4KB page
cache size */
09cbfeaf1a5a67 Kirill A. Shutemov 2016-04-01 1824 if (F2FS_BLKSIZE != PAGE_SIZE) {
5c9b469295fb6b majianpeng 2013-02-01 1825 f2fs_msg(sb, KERN_INFO,
14d7e9de0500e9 majianpeng 2013-02-01 1826 "Invalid page_cache_size
(%lu), supports only 4KB\n",
09cbfeaf1a5a67 Kirill A. Shutemov 2016-04-01 1827 PAGE_SIZE);
688906fda2ad21 Icenowy Zheng 2019-07-25 1828 return -EFSCORRUPTED;
5c9b469295fb6b majianpeng 2013-02-01 1829 }
5c9b469295fb6b majianpeng 2013-02-01 1830
aff063e266cbf4 Jaegeuk Kim 2012-11-02 1831 /* Currently, support only 4KB block
size */
aff063e266cbf4 Jaegeuk Kim 2012-11-02 1832 blocksize = 1 <<
le32_to_cpu(raw_super->log_blocksize);
5c9b469295fb6b majianpeng 2013-02-01 1833 if (blocksize != F2FS_BLKSIZE) {
a07ef784356cf9 Namjae Jeon 2012-12-30 1834 f2fs_msg(sb, KERN_INFO,
a07ef784356cf9 Namjae Jeon 2012-12-30 1835 "Invalid blocksize (%u),
supports only 4KB\n",
a07ef784356cf9 Namjae Jeon 2012-12-30 1836 blocksize);
688906fda2ad21 Icenowy Zheng 2019-07-25 1837 return -EFSCORRUPTED;
a07ef784356cf9 Namjae Jeon 2012-12-30 1838 }
5c9b469295fb6b majianpeng 2013-02-01 1839
9a59b62fd88196 Chao Yu 2015-12-15 1840 /* check log blocks per segment */
9a59b62fd88196 Chao Yu 2015-12-15 1841 if
(le32_to_cpu(raw_super->log_blocks_per_seg) != 9) {
9a59b62fd88196 Chao Yu 2015-12-15 1842 f2fs_msg(sb, KERN_INFO,
9a59b62fd88196 Chao Yu 2015-12-15 1843 "Invalid log blocks per
segment (%u)\n",
9a59b62fd88196 Chao Yu 2015-12-15 1844
le32_to_cpu(raw_super->log_blocks_per_seg));
688906fda2ad21 Icenowy Zheng 2019-07-25 1845 return -EFSCORRUPTED;
9a59b62fd88196 Chao Yu 2015-12-15 1846 }
9a59b62fd88196 Chao Yu 2015-12-15 1847
55cf9cb63f0e54 Chao Yu 2014-09-15 1848 /* Currently, support
512/1024/2048/4096 bytes sector size */
55cf9cb63f0e54 Chao Yu 2014-09-15 1849 if
(le32_to_cpu(raw_super->log_sectorsize) >
55cf9cb63f0e54 Chao Yu 2014-09-15 1850 F2FS_MAX_LOG_SECTOR_SIZE ||
55cf9cb63f0e54 Chao Yu 2014-09-15 1851
le32_to_cpu(raw_super->log_sectorsize) <
55cf9cb63f0e54 Chao Yu 2014-09-15 1852 F2FS_MIN_LOG_SECTOR_SIZE) {
55cf9cb63f0e54 Chao Yu 2014-09-15 1853 f2fs_msg(sb, KERN_INFO,
"Invalid log sectorsize (%u)",
55cf9cb63f0e54 Chao Yu 2014-09-15 1854
le32_to_cpu(raw_super->log_sectorsize));
688906fda2ad21 Icenowy Zheng 2019-07-25 1855 return -EFSCORRUPTED;
a07ef784356cf9 Namjae Jeon 2012-12-30 1856 }
55cf9cb63f0e54 Chao Yu 2014-09-15 1857 if
(le32_to_cpu(raw_super->log_sectors_per_block) +
55cf9cb63f0e54 Chao Yu 2014-09-15 1858
le32_to_cpu(raw_super->log_sectorsize) !=
55cf9cb63f0e54 Chao Yu 2014-09-15 1859 F2FS_MAX_LOG_SECTOR_SIZE) {
55cf9cb63f0e54 Chao Yu 2014-09-15 1860 f2fs_msg(sb, KERN_INFO,
55cf9cb63f0e54 Chao Yu 2014-09-15 1861 "Invalid log sectors per
block(%u) log sectorsize(%u)",
55cf9cb63f0e54 Chao Yu 2014-09-15 1862
le32_to_cpu(raw_super->log_sectors_per_block),
55cf9cb63f0e54 Chao Yu 2014-09-15 1863
le32_to_cpu(raw_super->log_sectorsize));
688906fda2ad21 Icenowy Zheng 2019-07-25 1864 return -EFSCORRUPTED;
a07ef784356cf9 Namjae Jeon 2012-12-30 1865 }
9a59b62fd88196 Chao Yu 2015-12-15 1866
e60b97231950fb Jaegeuk Kim 2018-04-27 1867 segment_count =
le32_to_cpu(raw_super->segment_count);
e60b97231950fb Jaegeuk Kim 2018-04-27 1868 segs_per_sec =
le32_to_cpu(raw_super->segs_per_sec);
e60b97231950fb Jaegeuk Kim 2018-04-27 1869 secs_per_zone =
le32_to_cpu(raw_super->secs_per_zone);
e60b97231950fb Jaegeuk Kim 2018-04-27 1870 total_sections =
le32_to_cpu(raw_super->section_count);
e60b97231950fb Jaegeuk Kim 2018-04-27 1871
e60b97231950fb Jaegeuk Kim 2018-04-27 1872 /* blocks_per_seg should be 512,
given the above check */
e60b97231950fb Jaegeuk Kim 2018-04-27 1873 blocks_per_seg = 1 <<
le32_to_cpu(raw_super->log_blocks_per_seg);
e60b97231950fb Jaegeuk Kim 2018-04-27 1874
e60b97231950fb Jaegeuk Kim 2018-04-27 1875 if (segment_count >
F2FS_MAX_SEGMENT ||
e60b97231950fb Jaegeuk Kim 2018-04-27 1876 segment_count <
F2FS_MIN_SEGMENTS) {
e60b97231950fb Jaegeuk Kim 2018-04-27 1877 f2fs_msg(sb, KERN_INFO,
e60b97231950fb Jaegeuk Kim 2018-04-27 1878 "Invalid segment count
(%u)",
e60b97231950fb Jaegeuk Kim 2018-04-27 1879 segment_count);
688906fda2ad21 Icenowy Zheng 2019-07-25 1880 return -EFSCORRUPTED;
e60b97231950fb Jaegeuk Kim 2018-04-27 1881 }
e60b97231950fb Jaegeuk Kim 2018-04-27 1882
e60b97231950fb Jaegeuk Kim 2018-04-27 1883 if (total_sections >
segment_count ||
e60b97231950fb Jaegeuk Kim 2018-04-27 1884 total_sections <
F2FS_MIN_SEGMENTS ||
e60b97231950fb Jaegeuk Kim 2018-04-27 1885 segs_per_sec > segment_count ||
!segs_per_sec) {
e60b97231950fb Jaegeuk Kim 2018-04-27 1886 f2fs_msg(sb, KERN_INFO,
e60b97231950fb Jaegeuk Kim 2018-04-27 1887 "Invalid segment/section
count (%u, %u x %u)",
e60b97231950fb Jaegeuk Kim 2018-04-27 1888 segment_count, total_sections,
segs_per_sec);
688906fda2ad21 Icenowy Zheng 2019-07-25 1889 return -EFSCORRUPTED;
e60b97231950fb Jaegeuk Kim 2018-04-27 1890 }
e60b97231950fb Jaegeuk Kim 2018-04-27 1891
e60b97231950fb Jaegeuk Kim 2018-04-27 1892 if ((segment_count / segs_per_sec)
< total_sections) {
e60b97231950fb Jaegeuk Kim 2018-04-27 1893 f2fs_msg(sb, KERN_INFO,
e60b97231950fb Jaegeuk Kim 2018-04-27 1894 "Small segment_count (%u <
%u * %u)",
e60b97231950fb Jaegeuk Kim 2018-04-27 1895 segment_count, segs_per_sec,
total_sections);
688906fda2ad21 Icenowy Zheng 2019-07-25 1896 return -EFSCORRUPTED;
e60b97231950fb Jaegeuk Kim 2018-04-27 1897 }
e60b97231950fb Jaegeuk Kim 2018-04-27 1898
c5e4022f25d054 Martin Blumenstingl 2018-12-22 1899 if (segment_count >
(le64_to_cpu(raw_super->block_count) >> 9)) {
e60b97231950fb Jaegeuk Kim 2018-04-27 1900 f2fs_msg(sb, KERN_INFO,
c5e4022f25d054 Martin Blumenstingl 2018-12-22 1901 "Wrong segment_count /
block_count (%u > %llu)",
c5e4022f25d054 Martin Blumenstingl 2018-12-22 1902 segment_count,
le64_to_cpu(raw_super->block_count));
688906fda2ad21 Icenowy Zheng 2019-07-25 1903 return -EFSCORRUPTED;
e60b97231950fb Jaegeuk Kim 2018-04-27 1904 }
e60b97231950fb Jaegeuk Kim 2018-04-27 1905
f3d6361a96a455 Chao Yu 2018-06-23 1906 if (secs_per_zone >
total_sections || !secs_per_zone) {
e60b97231950fb Jaegeuk Kim 2018-04-27 1907 f2fs_msg(sb, KERN_INFO,
f3d6361a96a455 Chao Yu 2018-06-23 1908 "Wrong secs_per_zone /
total_sections (%u, %u)",
e60b97231950fb Jaegeuk Kim 2018-04-27 1909 secs_per_zone, total_sections);
688906fda2ad21 Icenowy Zheng 2019-07-25 1910 return -EFSCORRUPTED;
e60b97231950fb Jaegeuk Kim 2018-04-27 1911 }
e60b97231950fb Jaegeuk Kim 2018-04-27 1912 if
(le32_to_cpu(raw_super->extension_count) > F2FS_MAX_EXTENSION) {
e60b97231950fb Jaegeuk Kim 2018-04-27 1913 f2fs_msg(sb, KERN_INFO,
e60b97231950fb Jaegeuk Kim 2018-04-27 1914 "Corrupted extension count
(%u > %u)",
e60b97231950fb Jaegeuk Kim 2018-04-27 1915
le32_to_cpu(raw_super->extension_count),
e60b97231950fb Jaegeuk Kim 2018-04-27 1916 F2FS_MAX_EXTENSION);
688906fda2ad21 Icenowy Zheng 2019-07-25 1917 return -EFSCORRUPTED;
e60b97231950fb Jaegeuk Kim 2018-04-27 1918 }
e60b97231950fb Jaegeuk Kim 2018-04-27 1919
e60b97231950fb Jaegeuk Kim 2018-04-27 1920 if
(le32_to_cpu(raw_super->cp_payload) >
e60b97231950fb Jaegeuk Kim 2018-04-27 1921 (blocks_per_seg - F2FS_CP_PACKS))
{
e60b97231950fb Jaegeuk Kim 2018-04-27 1922 f2fs_msg(sb, KERN_INFO,
e60b97231950fb Jaegeuk Kim 2018-04-27 1923 "Insane cp_payload (%u >
%u)",
e60b97231950fb Jaegeuk Kim 2018-04-27 1924
le32_to_cpu(raw_super->cp_payload),
e60b97231950fb Jaegeuk Kim 2018-04-27 1925 blocks_per_seg - F2FS_CP_PACKS);
688906fda2ad21 Icenowy Zheng 2019-07-25 1926 return -EFSCORRUPTED;
e60b97231950fb Jaegeuk Kim 2018-04-27 1927 }
e60b97231950fb Jaegeuk Kim 2018-04-27 1928
9a59b62fd88196 Chao Yu 2015-12-15 1929 /* check reserved ino info */
9a59b62fd88196 Chao Yu 2015-12-15 1930 if
(le32_to_cpu(raw_super->node_ino) != 1 ||
9a59b62fd88196 Chao Yu 2015-12-15 1931 le32_to_cpu(raw_super->meta_ino)
!= 2 ||
9a59b62fd88196 Chao Yu 2015-12-15 1932 le32_to_cpu(raw_super->root_ino)
!= 3) {
9a59b62fd88196 Chao Yu 2015-12-15 1933 f2fs_msg(sb, KERN_INFO,
9a59b62fd88196 Chao Yu 2015-12-15 1934 "Invalid Fs Meta Ino:
node(%u) meta(%u) root(%u)",
9a59b62fd88196 Chao Yu 2015-12-15 1935
le32_to_cpu(raw_super->node_ino),
9a59b62fd88196 Chao Yu 2015-12-15 1936
le32_to_cpu(raw_super->meta_ino),
9a59b62fd88196 Chao Yu 2015-12-15 1937
le32_to_cpu(raw_super->root_ino));
688906fda2ad21 Icenowy Zheng 2019-07-25 1938 return -EFSCORRUPTED;
9a59b62fd88196 Chao Yu 2015-12-15 1939 }
9a59b62fd88196 Chao Yu 2015-12-15 1940
9a59b62fd88196 Chao Yu 2015-12-15 1941 /* check CP/SIT/NAT/SSA/MAIN_AREA
area boundary */
df728b0f6954c3 Jaegeuk Kim 2016-03-23 1942 if (sanity_check_area_boundary(sbi,
bh))
688906fda2ad21 Icenowy Zheng 2019-07-25 1943 return -EFSCORRUPTED;
9a59b62fd88196 Chao Yu 2015-12-15 1944
aff063e266cbf4 Jaegeuk Kim 2012-11-02 1945 return 0;
aff063e266cbf4 Jaegeuk Kim 2012-11-02 1946 }
aff063e266cbf4 Jaegeuk Kim 2012-11-02 1947
:::::: The code at line 1819 was first introduced by commit
:::::: a07ef784356cf9157bd9bed5254cbb9a82d33722 f2fs: introduce f2fs_msg to ease adding
information prints
:::::: TO: Namjae Jeon <namjae.jeon(a)samsung.com>
:::::: CC: Jaegeuk Kim <jaegeuk.kim(a)samsung.com>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation