mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
This is the 4.14.352 OpenELA-Extended LTS stable release
-----BEGIN PGP SIGNATURE----- iQJNBAABCAA3FiEERFwmR4yFob14UDOYC8702P6YulgFAmbMN2wZHHZlZ2FyZC5u b3NzdW1Ab3JhY2xlLmNvbQAKCRALzvTY/pi6WI/OD/0df1vNkreJiEgYmrzoT5rG FekNwYxJLpnN2cIk5qZv5SUSrZDfqPEMzhz4tuv0kVMv8gb+k8tXpBGr6rfZlYEw UoDAZzAN0Ns0JwxtPoIIJrjfD1a0xq8teSGhbphUDLA/fH/M66pTPtJrDjia/99E 0Ymhc+8pv77UljmaxjEoQ8a0hXoe/TxoxwJpUdklwhcXZ+u4+FwJfxxHd4webnGs XiC1rrq4fYOX5MaomrGhKQBFv/iQAM+U9VHn4m1yLqDXYXn3j7stOa8dPY5g6EJw kzPsure193EXj9Tp5Y+sC+aExLGfaO7MB+hlXR0El/cHboTFJshafVuIhHp93zlI 4NVExnDe3Xmrb7U4hCJd2L2z3Vgq8jSH0R1FwZqfZruOo+B1zG9/SIiM96pD5YR1 ugk2P9XAXEpDUoMv4XPCNlpMetT7HBdUWIJCZQDCTl1axiGWnqs1MpGVHfavoTLz CKuoluR/0vL5lVX7vrc1Pb6+7APaY0U9ehVDlMbumS2PmpkLsoaTbTLlJsnVBrmg fkN4sjja0mszL4f5zzPCZ/9G8opf63+LLiheUNdnB4yWn7VoK4+kH3v3dW3e2gzJ t5IYygJ8Ys8pCLAueuiRb3pce59HrEq8mFtoF+MXlLN4fVHFwKbTtJWiEvEl5x3E Ks8j03Ywad/Zcl5GiwnnEw== =AZG+ -----END PGP SIGNATURE----- Merge tag 'v4.14.352-openela' of https://github.com/openela/kernel-lts This is the 4.14.352 OpenELA-Extended LTS stable release * tag 'v4.14.352-openela' of https://github.com/openela/kernel-lts: (32 commits) LTS: Update to 4.14.352 filelock: Fix fcntl/close race recovery compat path jfs: don't walk off the end of ealist ocfs2: add bounds checking to ocfs2_check_dir_entry() net: relax socket state check at accept time. ACPI: processor_idle: Fix invalid comparison with insertion sort for latency ARM: 9324/1: fix get_user() broken with veneer filelock: Remove locks reliably when fcntl/close race is detected hfsplus: fix uninit-value in copy_name selftests/vDSO: fix clang build errors and warnings spi: imx: Don't expect DMA for i.MX{25,35,50,51,53} cspi devices fs: better handle deep ancestor chains in is_subdir() Bluetooth: hci_core: cancel all works upon hci_unregister_dev() net: mac802154: Fix racy device stats updates by DEV_STATS_INC() and DEV_STATS_ADD() net: usb: qmi_wwan: add Telit FN912 compositions ALSA: dmaengine_pcm: terminate dmaengine before synchronize s390/sclp: Fix sclp_init() cleanup on failure Input: elantech - fix touchpad state on resume for Lenovo N24 wifi: cfg80211: wext: add extra SIOCSIWSCAN data check mei: demote client disconnect warning on suspend to debug ... Change-Id: I4cbdfa0321bf83d62ac62f386eb77d21c5785dec Signed-off-by: Richard Raya <rdxzv.dev@gmail.com>
This commit is contained in:
commit
f15dbc5435
@ -1,5 +1,5 @@
|
||||
upstream_repo: git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
|
||||
upstream_base: 4.19.304
|
||||
base: 4.14.336
|
||||
upstream_version: 4.19.318
|
||||
version: 4.14.351
|
||||
upstream_version: 4.19.319
|
||||
version: 4.14.352
|
||||
|
122
.elts/meta/4.14.352.yaml
Normal file
122
.elts/meta/4.14.352.yaml
Normal file
@ -0,0 +1,122 @@
|
||||
c133012a813396eefedf1bfa049efe8015b98812:
|
||||
title: 'gcc-plugins: Rename last_stmt() for GCC 14+'
|
||||
mainline: 2e3f65ccfe6b0778b261ad69c9603ae85f210334
|
||||
upstream: 2d05669ce1f18c1bc51476980a0e8bd107682546
|
||||
2eb33ecdc2e4a03f4b673a04428924293b58cd7e:
|
||||
title: 'scsi: qedf: Set qed_slowpath_params to zero before use'
|
||||
mainline: 6c3bb589debd763dc4b94803ddf3c13b4fcca776
|
||||
upstream: 9656f9540fa3949dfb65e9f18d263bbd96778831
|
||||
7af36fe3934a05c3df07dac10732c2f2097fa9eb:
|
||||
title: 'ACPI: EC: Abort address space access upon error'
|
||||
mainline: f6f172dc6a6d7775b2df6adfd1350700e9a847ec
|
||||
upstream: 52a1125633abf465f59d184020add71616b87efa
|
||||
af32f802de713de4b0a2b4f6e97c8e1ca9dfc758:
|
||||
title: 'ACPI: EC: Avoid returning AE_OK on errors in address space handler'
|
||||
mainline: c4bd7f1d78340e63de4d073fd3dbe5391e2996e5
|
||||
upstream: 286b25bf40251e940756371eae6c7e59fdbd6745
|
||||
2fac830d7e5b9250a13d556a1d5125a1a2b351b4:
|
||||
title: 'wifi: mac80211: mesh: init nonpeer_pm to active by default in mesh sdata'
|
||||
mainline: 6f6291f09a322c1c1578badac8072d049363f4e6
|
||||
upstream: 46487275e810d1e7c99f36af9fdfae0909c4e200
|
||||
60882d697cfb5c6868f24649c60b8dd8d2703668:
|
||||
title: 'wifi: mac80211: fix UBSAN noise in ieee80211_prep_hw_scan()'
|
||||
mainline: 92ecbb3ac6f3fe8ae9edf3226c76aa17b6800699
|
||||
upstream: cd3212a9e0209dff7eda30f01ab8590f5e8d92fb
|
||||
f995731405d60b4b3e3cb2c556625c5c3a786c8f:
|
||||
title: 'Input: silead - add support for capactive home button found on some x86 tablets'
|
||||
1501ce3d5bfea3a1e8aaec61b878f20d8a93dfcb:
|
||||
title: 'Input: silead - Always support 10 fingers'
|
||||
mainline: 38a38f5a36da9820680d413972cb733349400532
|
||||
upstream: ce0368a52554d213c5cd447ba786b54390a845e1
|
||||
6e6d94454bba0055f8d77d3bb42d49c369e80e95:
|
||||
title: 'ila: block BH in ila_output()'
|
||||
mainline: cf28ff8e4c02e1ffa850755288ac954b6ff0db8c
|
||||
upstream: 7435bd2f84a25aba607030237261b3795ba782da
|
||||
265ba671aaff09b4531db6875d668dfb4efd716a:
|
||||
title: 'kconfig: gconf: give a proper initial state to the Save button'
|
||||
mainline: 46edf4372e336ef3a61c3126e49518099d2e2e6d
|
||||
upstream: b6d6a91b584a022424d99264741bdfa6b336c83b
|
||||
692c2ebeacc0c82e6c088e5a6f63ff9395a2082e:
|
||||
title: 'kconfig: remove wrong expr_trans_bool()'
|
||||
mainline: 77a92660d8fe8d29503fae768d9f5eb529c88b36
|
||||
upstream: b366d89859fe7b58894b3698844b551fe32f892a
|
||||
8d3da24eb73289dde20e54b84c848e61ae0138b0:
|
||||
title: 'fs/file: fix the check in find_next_fd()'
|
||||
mainline: ed8c7fbdfe117abbef81f65428ba263118ef298a
|
||||
upstream: 5611e11988535125b3a05305680851ff587702a9
|
||||
cdb32323efca90437116ce55ba43da736ecad374:
|
||||
title: 'mei: demote client disconnect warning on suspend to debug'
|
||||
mainline: 1db5322b7e6b58e1b304ce69a50e9dca798ca95b
|
||||
upstream: bd2a753fa12cf3d28726a4bf067398514e52d57c
|
||||
56e8fc1b0ac2a752cba13ccd0e128f7eaadcd8d0:
|
||||
title: 'wifi: cfg80211: wext: add extra SIOCSIWSCAN data check'
|
||||
mainline: 6ef09cdc5ba0f93826c09d810c141a8d103a80fc
|
||||
upstream: b02ba9a0b55b762bd04743a22f3d9f9645005e79
|
||||
0eafa6b4fdf53fdc8b8924325f994fe4ed0700a7:
|
||||
title: 'Input: elantech - fix touchpad state on resume for Lenovo N24'
|
||||
mainline: a69ce592cbe0417664bc5a075205aa75c2ec1273
|
||||
upstream: 9b6a1cb833dc8ceab3fbc45a261a8dd37c4f8013
|
||||
2ba3ceb092c9ac54204c7416bfa884d37f59bd1a:
|
||||
title: 's390/sclp: Fix sclp_init() cleanup on failure'
|
||||
mainline: 6434b33faaa063df500af355ee6c3942e0f8d982
|
||||
upstream: a778987afc36d5dc02a1f82d352a81edcaf7eb83
|
||||
f78b195536a163671b4aa1b85b88e432919c79f9:
|
||||
title: 'ALSA: dmaengine_pcm: terminate dmaengine before synchronize'
|
||||
mainline: 6a7db25aad8ce6512b366d2ce1d0e60bac00a09d
|
||||
upstream: fe0a6e7eb38f9d5396f6ff548186a6cd62c08b1a
|
||||
c16c01ccdd91f3d7764c0e63da5ba2274eb031a8:
|
||||
title: 'net: usb: qmi_wwan: add Telit FN912 compositions'
|
||||
mainline: 77453e2b015b5ced5b3f45364dd5a72dfc3bdecb
|
||||
upstream: 6f5c552bb803ac30a746addc91b3da9b94b48c4d
|
||||
eef43c3ccb72817061d1c663129fc04ff09de4a6:
|
||||
title: 'net: mac802154: Fix racy device stats updates by DEV_STATS_INC() and DEV_STATS_ADD()'
|
||||
mainline: b8ec0dc3845f6c9089573cb5c2c4b05f7fc10728
|
||||
upstream: 77cfeb27b8ded33c3f4023a24a2d1517ad4e4893
|
||||
43df6e148cb43ad243a345291d8ddc2cea7786ce:
|
||||
title: 'Bluetooth: hci_core: cancel all works upon hci_unregister_dev()'
|
||||
mainline: 0d151a103775dd9645c78c97f77d6e2a5298d913
|
||||
upstream: 48542881997e17b49dc16b93fe910e0cfcf7a9f9
|
||||
fe34d279afd5186910b42c6ccf419f32552f6eab:
|
||||
title: 'fs: better handle deep ancestor chains in is_subdir()'
|
||||
mainline: 391b59b045004d5b985d033263ccba3e941a7740
|
||||
upstream: a5c4645346b0efb5a10ed28ae281a9af29037608
|
||||
4e4a79155c2fe74dd5aea4e56b96923d39d50408:
|
||||
title: 'spi: imx: Don''t expect DMA for i.MX{25,35,50,51,53} cspi devices'
|
||||
mainline: ce1dac560a74220f2e53845ec0723b562288aed4
|
||||
upstream: 4f5e56dddabe947cc840ffb2db60d9df6ca9e8b9
|
||||
010cabb684a2904c698713694a24cb0c99d24f41:
|
||||
title: 'selftests/vDSO: fix clang build errors and warnings'
|
||||
mainline: 73810cd45b99c6c418e1c6a487b52c1e74edb20d
|
||||
upstream: d5e9dddd18fdfe04772bce07d4a34e39e7b1e402
|
||||
7cc7fff373ff4131e0db0e9f099913b524cd0275:
|
||||
title: 'hfsplus: fix uninit-value in copy_name'
|
||||
mainline: 0570730c16307a72f8241df12363f76600baf57d
|
||||
upstream: 72805debec8f7aa342da194fe0ed7bc8febea335
|
||||
0092a371ee34e3dc89e46d1267ee614d60026158:
|
||||
title: 'filelock: Remove locks reliably when fcntl/close race is detected'
|
||||
mainline: 3cad1bc010416c6dd780643476bc59ed742436b9
|
||||
upstream: d30ff33040834c3b9eee29740acd92f9c7ba2250
|
||||
a650c33ed9edba733de822a47397ead4c1ebc2fb:
|
||||
title: 'ARM: 9324/1: fix get_user() broken with veneer'
|
||||
mainline: 24d3ba0a7b44c1617c27f5045eecc4f34752ab03
|
||||
upstream: 41a5c1717bf4ad1b6084e8682de64b178eabc059
|
||||
f70e0950f817b75ed1f01859f15d9c2b6a37dba2:
|
||||
title: 'ACPI: processor_idle: Fix invalid comparison with insertion sort for latency'
|
||||
mainline: 233323f9b9f828cd7cd5145ad811c1990b692542
|
||||
upstream: c9d6e349f7aad4ab9c557047d357df256c15f25e
|
||||
aac14d323840fa0e71308002c051ce8174804c77:
|
||||
title: 'net: relax socket state check at accept time.'
|
||||
mainline: 26afda78cda3da974fd4c287962c169e9462c495
|
||||
upstream: 7de00adc9bd035d861ba4177848ca0bfa5ed1e04
|
||||
3c99e72be6bf85c5e3e19ddf0e1a38a9eebbd4a6:
|
||||
title: 'ocfs2: add bounds checking to ocfs2_check_dir_entry()'
|
||||
mainline: 255547c6bb8940a97eea94ef9d464ea5967763fb
|
||||
upstream: 13d38c00df97289e6fba2e54193959293fd910d2
|
||||
7f65c3bae2493c58ef7d6ef1bf9ce717c71fb87d:
|
||||
title: 'jfs: don''t walk off the end of ealist'
|
||||
mainline: d0fa70aca54c8643248e89061da23752506ec0d4
|
||||
upstream: 7f91bd0f2941fa36449ce1a15faaa64f840d9746
|
||||
a429e9177821cfc3fc4b316b64e431ae613319c3:
|
||||
title: 'filelock: Fix fcntl/close race recovery compat path'
|
||||
mainline: f8138f2ad2f745b9a1c696a05b749eabe44337ea
|
||||
upstream: a561145f3ae973ebf3e0aee41624e92a6c5cb38d
|
128
.elts/upstream/4.19.319.yaml
Normal file
128
.elts/upstream/4.19.319.yaml
Normal file
@ -0,0 +1,128 @@
|
||||
2d05669ce1f18c1bc51476980a0e8bd107682546:
|
||||
title: 'gcc-plugins: Rename last_stmt() for GCC 14+'
|
||||
mainline: 2e3f65ccfe6b0778b261ad69c9603ae85f210334
|
||||
backport: c133012a813396eefedf1bfa049efe8015b98812
|
||||
9656f9540fa3949dfb65e9f18d263bbd96778831:
|
||||
title: 'scsi: qedf: Set qed_slowpath_params to zero before use'
|
||||
mainline: 6c3bb589debd763dc4b94803ddf3c13b4fcca776
|
||||
backport: 2eb33ecdc2e4a03f4b673a04428924293b58cd7e
|
||||
52a1125633abf465f59d184020add71616b87efa:
|
||||
title: 'ACPI: EC: Abort address space access upon error'
|
||||
mainline: f6f172dc6a6d7775b2df6adfd1350700e9a847ec
|
||||
backport: 7af36fe3934a05c3df07dac10732c2f2097fa9eb
|
||||
286b25bf40251e940756371eae6c7e59fdbd6745:
|
||||
title: 'ACPI: EC: Avoid returning AE_OK on errors in address space handler'
|
||||
mainline: c4bd7f1d78340e63de4d073fd3dbe5391e2996e5
|
||||
backport: af32f802de713de4b0a2b4f6e97c8e1ca9dfc758
|
||||
46487275e810d1e7c99f36af9fdfae0909c4e200:
|
||||
title: 'wifi: mac80211: mesh: init nonpeer_pm to active by default in mesh sdata'
|
||||
mainline: 6f6291f09a322c1c1578badac8072d049363f4e6
|
||||
backport: 2fac830d7e5b9250a13d556a1d5125a1a2b351b4
|
||||
cd3212a9e0209dff7eda30f01ab8590f5e8d92fb:
|
||||
title: 'wifi: mac80211: fix UBSAN noise in ieee80211_prep_hw_scan()'
|
||||
mainline: 92ecbb3ac6f3fe8ae9edf3226c76aa17b6800699
|
||||
backport: 60882d697cfb5c6868f24649c60b8dd8d2703668
|
||||
ce0368a52554d213c5cd447ba786b54390a845e1:
|
||||
title: 'Input: silead - Always support 10 fingers'
|
||||
mainline: 38a38f5a36da9820680d413972cb733349400532
|
||||
backport: 1501ce3d5bfea3a1e8aaec61b878f20d8a93dfcb
|
||||
7435bd2f84a25aba607030237261b3795ba782da:
|
||||
title: 'ila: block BH in ila_output()'
|
||||
mainline: cf28ff8e4c02e1ffa850755288ac954b6ff0db8c
|
||||
backport: 6e6d94454bba0055f8d77d3bb42d49c369e80e95
|
||||
b6d6a91b584a022424d99264741bdfa6b336c83b:
|
||||
title: 'kconfig: gconf: give a proper initial state to the Save button'
|
||||
mainline: 46edf4372e336ef3a61c3126e49518099d2e2e6d
|
||||
backport: 265ba671aaff09b4531db6875d668dfb4efd716a
|
||||
b366d89859fe7b58894b3698844b551fe32f892a:
|
||||
title: 'kconfig: remove wrong expr_trans_bool()'
|
||||
mainline: 77a92660d8fe8d29503fae768d9f5eb529c88b36
|
||||
backport: 692c2ebeacc0c82e6c088e5a6f63ff9395a2082e
|
||||
5611e11988535125b3a05305680851ff587702a9:
|
||||
title: 'fs/file: fix the check in find_next_fd()'
|
||||
mainline: ed8c7fbdfe117abbef81f65428ba263118ef298a
|
||||
backport: 8d3da24eb73289dde20e54b84c848e61ae0138b0
|
||||
bd2a753fa12cf3d28726a4bf067398514e52d57c:
|
||||
title: 'mei: demote client disconnect warning on suspend to debug'
|
||||
mainline: 1db5322b7e6b58e1b304ce69a50e9dca798ca95b
|
||||
backport: cdb32323efca90437116ce55ba43da736ecad374
|
||||
b02ba9a0b55b762bd04743a22f3d9f9645005e79:
|
||||
title: 'wifi: cfg80211: wext: add extra SIOCSIWSCAN data check'
|
||||
mainline: 6ef09cdc5ba0f93826c09d810c141a8d103a80fc
|
||||
backport: 56e8fc1b0ac2a752cba13ccd0e128f7eaadcd8d0
|
||||
9b6a1cb833dc8ceab3fbc45a261a8dd37c4f8013:
|
||||
title: 'Input: elantech - fix touchpad state on resume for Lenovo N24'
|
||||
mainline: a69ce592cbe0417664bc5a075205aa75c2ec1273
|
||||
backport: 0eafa6b4fdf53fdc8b8924325f994fe4ed0700a7
|
||||
0405060fa24286e361cf784bfb37695e8dadc541:
|
||||
title: 'bytcr_rt5640 : inverse jack detect for Archos 101 cesium'
|
||||
mainline: e3209a1827646daaab744aa6a5767b1f57fb5385
|
||||
skipped: commit did not cherry-pick cleanly
|
||||
0aa5858cb091344f149d1169f00d08b585fa70de:
|
||||
title: 'can: kvaser_usb: fix return value for hif_usb_send_regout'
|
||||
mainline: 0d34d8163fd87978a6abd792e2d8ad849f4c3d57
|
||||
skipped: fixes code not in 4.14.y
|
||||
a778987afc36d5dc02a1f82d352a81edcaf7eb83:
|
||||
title: 's390/sclp: Fix sclp_init() cleanup on failure'
|
||||
mainline: 6434b33faaa063df500af355ee6c3942e0f8d982
|
||||
backport: 2ba3ceb092c9ac54204c7416bfa884d37f59bd1a
|
||||
fe0a6e7eb38f9d5396f6ff548186a6cd62c08b1a:
|
||||
title: 'ALSA: dmaengine_pcm: terminate dmaengine before synchronize'
|
||||
mainline: 6a7db25aad8ce6512b366d2ce1d0e60bac00a09d
|
||||
backport: f78b195536a163671b4aa1b85b88e432919c79f9
|
||||
6f5c552bb803ac30a746addc91b3da9b94b48c4d:
|
||||
title: 'net: usb: qmi_wwan: add Telit FN912 compositions'
|
||||
mainline: 77453e2b015b5ced5b3f45364dd5a72dfc3bdecb
|
||||
backport: c16c01ccdd91f3d7764c0e63da5ba2274eb031a8
|
||||
77cfeb27b8ded33c3f4023a24a2d1517ad4e4893:
|
||||
title: 'net: mac802154: Fix racy device stats updates by DEV_STATS_INC() and DEV_STATS_ADD()'
|
||||
mainline: b8ec0dc3845f6c9089573cb5c2c4b05f7fc10728
|
||||
backport: eef43c3ccb72817061d1c663129fc04ff09de4a6
|
||||
48542881997e17b49dc16b93fe910e0cfcf7a9f9:
|
||||
title: 'Bluetooth: hci_core: cancel all works upon hci_unregister_dev()'
|
||||
mainline: 0d151a103775dd9645c78c97f77d6e2a5298d913
|
||||
backport: 43df6e148cb43ad243a345291d8ddc2cea7786ce
|
||||
a5c4645346b0efb5a10ed28ae281a9af29037608:
|
||||
title: 'fs: better handle deep ancestor chains in is_subdir()'
|
||||
mainline: 391b59b045004d5b985d033263ccba3e941a7740
|
||||
backport: fe34d279afd5186910b42c6ccf419f32552f6eab
|
||||
4f5e56dddabe947cc840ffb2db60d9df6ca9e8b9:
|
||||
title: 'spi: imx: Don''t expect DMA for i.MX{25,35,50,51,53} cspi devices'
|
||||
mainline: ce1dac560a74220f2e53845ec0723b562288aed4
|
||||
backport: 4e4a79155c2fe74dd5aea4e56b96923d39d50408
|
||||
d5e9dddd18fdfe04772bce07d4a34e39e7b1e402:
|
||||
title: 'selftests/vDSO: fix clang build errors and warnings'
|
||||
mainline: 73810cd45b99c6c418e1c6a487b52c1e74edb20d
|
||||
backport: 010cabb684a2904c698713694a24cb0c99d24f41
|
||||
72805debec8f7aa342da194fe0ed7bc8febea335:
|
||||
title: 'hfsplus: fix uninit-value in copy_name'
|
||||
mainline: 0570730c16307a72f8241df12363f76600baf57d
|
||||
backport: 7cc7fff373ff4131e0db0e9f099913b524cd0275
|
||||
d30ff33040834c3b9eee29740acd92f9c7ba2250:
|
||||
title: 'filelock: Remove locks reliably when fcntl/close race is detected'
|
||||
mainline: 3cad1bc010416c6dd780643476bc59ed742436b9
|
||||
backport: 0092a371ee34e3dc89e46d1267ee614d60026158
|
||||
41a5c1717bf4ad1b6084e8682de64b178eabc059:
|
||||
title: 'ARM: 9324/1: fix get_user() broken with veneer'
|
||||
mainline: 24d3ba0a7b44c1617c27f5045eecc4f34752ab03
|
||||
backport: a650c33ed9edba733de822a47397ead4c1ebc2fb
|
||||
c9d6e349f7aad4ab9c557047d357df256c15f25e:
|
||||
title: 'ACPI: processor_idle: Fix invalid comparison with insertion sort for latency'
|
||||
mainline: 233323f9b9f828cd7cd5145ad811c1990b692542
|
||||
backport: f70e0950f817b75ed1f01859f15d9c2b6a37dba2
|
||||
7de00adc9bd035d861ba4177848ca0bfa5ed1e04:
|
||||
title: 'net: relax socket state check at accept time.'
|
||||
mainline: 26afda78cda3da974fd4c287962c169e9462c495
|
||||
backport: aac14d323840fa0e71308002c051ce8174804c77
|
||||
13d38c00df97289e6fba2e54193959293fd910d2:
|
||||
title: 'ocfs2: add bounds checking to ocfs2_check_dir_entry()'
|
||||
mainline: 255547c6bb8940a97eea94ef9d464ea5967763fb
|
||||
backport: 3c99e72be6bf85c5e3e19ddf0e1a38a9eebbd4a6
|
||||
7f91bd0f2941fa36449ce1a15faaa64f840d9746:
|
||||
title: 'jfs: don''t walk off the end of ealist'
|
||||
mainline: d0fa70aca54c8643248e89061da23752506ec0d4
|
||||
backport: 7f65c3bae2493c58ef7d6ef1bf9ce717c71fb87d
|
||||
a561145f3ae973ebf3e0aee41624e92a6c5cb38d:
|
||||
title: 'filelock: Fix fcntl/close race recovery compat path'
|
||||
mainline: f8138f2ad2f745b9a1c696a05b749eabe44337ea
|
||||
backport: a429e9177821cfc3fc4b316b64e431ae613319c3
|
@ -23,6 +23,8 @@ Optional properties:
|
||||
- touchscreen-inverted-y : See touchscreen.txt
|
||||
- touchscreen-swapped-x-y : See touchscreen.txt
|
||||
- silead,max-fingers : maximum number of fingers the touchscreen can detect
|
||||
- silead,home-button : Boolean, set to true on devices which have a
|
||||
capacitive home-button build into the touchscreen
|
||||
- vddio-supply : regulator phandle for controller VDDIO
|
||||
- avdd-supply : regulator phandle for controller AVDD
|
||||
|
||||
|
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
||||
# SPDX-License-Identifier: GPL-2.0
|
||||
VERSION = 4
|
||||
PATCHLEVEL = 14
|
||||
SUBLEVEL = 351
|
||||
SUBLEVEL = 352
|
||||
EXTRAVERSION = -openela
|
||||
NAME = Petit Gorille
|
||||
|
||||
|
@ -145,16 +145,6 @@ extern int __get_user_64t_1(void *);
|
||||
extern int __get_user_64t_2(void *);
|
||||
extern int __get_user_64t_4(void *);
|
||||
|
||||
#define __GUP_CLOBBER_1 "lr", "cc" __asmbl_clobber("ip")
|
||||
#ifdef CONFIG_CPU_USE_DOMAINS
|
||||
#define __GUP_CLOBBER_2 "ip", "lr", "cc"
|
||||
#else
|
||||
#define __GUP_CLOBBER_2 "lr", "cc" __asmbl_clobber("ip")
|
||||
#endif
|
||||
#define __GUP_CLOBBER_4 "lr", "cc" __asmbl_clobber("ip")
|
||||
#define __GUP_CLOBBER_32t_8 "lr", "cc" __asmbl_clobber("ip")
|
||||
#define __GUP_CLOBBER_8 "lr", "cc" __asmbl_clobber("ip")
|
||||
|
||||
#define __get_user_x(__r2, __p, __e, __l, __s) \
|
||||
__asm__ __volatile__ ( \
|
||||
__asmeq("%0", "r0") __asmeq("%1", "r2") \
|
||||
@ -162,7 +152,7 @@ extern int __get_user_64t_4(void *);
|
||||
__asmbl("", "ip", "__get_user_" #__s) \
|
||||
: "=&r" (__e), "=r" (__r2) \
|
||||
: "0" (__p), "r" (__l) \
|
||||
: __GUP_CLOBBER_##__s)
|
||||
: "ip", "lr", "cc")
|
||||
|
||||
/* narrowing a double-word get into a single 32bit word register: */
|
||||
#ifdef __ARMEB__
|
||||
@ -184,7 +174,7 @@ extern int __get_user_64t_4(void *);
|
||||
__asmbl("", "ip", "__get_user_64t_" #__s) \
|
||||
: "=&r" (__e), "=r" (__r2) \
|
||||
: "0" (__p), "r" (__l) \
|
||||
: __GUP_CLOBBER_##__s)
|
||||
: "ip", "lr", "cc")
|
||||
#else
|
||||
#define __get_user_x_64t __get_user_x
|
||||
#endif
|
||||
|
@ -1312,10 +1312,13 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,
|
||||
if (ec->busy_polling || bits > 8)
|
||||
acpi_ec_burst_enable(ec);
|
||||
|
||||
for (i = 0; i < bytes; ++i, ++address, ++value)
|
||||
for (i = 0; i < bytes; ++i, ++address, ++value) {
|
||||
result = (function == ACPI_READ) ?
|
||||
acpi_ec_read(ec, address, value) :
|
||||
acpi_ec_write(ec, address, *value);
|
||||
if (result < 0)
|
||||
break;
|
||||
}
|
||||
|
||||
if (ec->busy_polling || bits > 8)
|
||||
acpi_ec_burst_disable(ec);
|
||||
@ -1327,8 +1330,10 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address,
|
||||
return AE_NOT_FOUND;
|
||||
case -ETIME:
|
||||
return AE_TIME;
|
||||
default:
|
||||
case 0:
|
||||
return AE_OK;
|
||||
default:
|
||||
return AE_ERROR;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -29,7 +29,6 @@
|
||||
#include <linux/acpi.h>
|
||||
#include <linux/dmi.h>
|
||||
#include <linux/sched.h> /* need_resched() */
|
||||
#include <linux/sort.h>
|
||||
#include <linux/tick.h>
|
||||
#include <linux/cpuidle.h>
|
||||
#include <linux/cpu.h>
|
||||
@ -541,28 +540,24 @@ static void acpi_processor_power_verify_c3(struct acpi_processor *pr,
|
||||
return;
|
||||
}
|
||||
|
||||
static int acpi_cst_latency_cmp(const void *a, const void *b)
|
||||
static void acpi_cst_latency_sort(struct acpi_processor_cx *states, size_t length)
|
||||
{
|
||||
const struct acpi_processor_cx *x = a, *y = b;
|
||||
int i, j, k;
|
||||
|
||||
if (!(x->valid && y->valid))
|
||||
return 0;
|
||||
if (x->latency > y->latency)
|
||||
return 1;
|
||||
if (x->latency < y->latency)
|
||||
return -1;
|
||||
return 0;
|
||||
}
|
||||
static void acpi_cst_latency_swap(void *a, void *b, int n)
|
||||
{
|
||||
struct acpi_processor_cx *x = a, *y = b;
|
||||
u32 tmp;
|
||||
for (i = 1; i < length; i++) {
|
||||
if (!states[i].valid)
|
||||
continue;
|
||||
|
||||
if (!(x->valid && y->valid))
|
||||
return;
|
||||
tmp = x->latency;
|
||||
x->latency = y->latency;
|
||||
y->latency = tmp;
|
||||
for (j = i - 1, k = i; j >= 0; j--) {
|
||||
if (!states[j].valid)
|
||||
continue;
|
||||
|
||||
if (states[j].latency > states[k].latency)
|
||||
swap(states[j].latency, states[k].latency);
|
||||
|
||||
k = j;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int acpi_processor_power_verify(struct acpi_processor *pr)
|
||||
@ -607,10 +602,7 @@ static int acpi_processor_power_verify(struct acpi_processor *pr)
|
||||
|
||||
if (buggy_latency) {
|
||||
pr_notice("FW issue: working around C-state latencies out of order\n");
|
||||
sort(&pr->power.states[1], max_cstate,
|
||||
sizeof(struct acpi_processor_cx),
|
||||
acpi_cst_latency_cmp,
|
||||
acpi_cst_latency_swap);
|
||||
acpi_cst_latency_sort(&pr->power.states[1], max_cstate);
|
||||
}
|
||||
|
||||
lapic_timer_propagate_broadcast(pr);
|
||||
|
@ -1519,16 +1519,47 @@ static void elantech_disconnect(struct psmouse *psmouse)
|
||||
psmouse->private = NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Some hw_version 4 models fail to properly activate absolute mode on
|
||||
* resume without going through disable/enable cycle.
|
||||
*/
|
||||
static const struct dmi_system_id elantech_needs_reenable[] = {
|
||||
#if defined(CONFIG_DMI) && defined(CONFIG_X86)
|
||||
{
|
||||
/* Lenovo N24 */
|
||||
.matches = {
|
||||
DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
|
||||
DMI_MATCH(DMI_PRODUCT_NAME, "81AF"),
|
||||
},
|
||||
},
|
||||
#endif
|
||||
{ }
|
||||
};
|
||||
|
||||
/*
|
||||
* Put the touchpad back into absolute mode when reconnecting
|
||||
*/
|
||||
static int elantech_reconnect(struct psmouse *psmouse)
|
||||
{
|
||||
int err;
|
||||
|
||||
psmouse_reset(psmouse);
|
||||
|
||||
if (elantech_detect(psmouse, 0))
|
||||
return -1;
|
||||
|
||||
if (dmi_check_system(elantech_needs_reenable)) {
|
||||
err = ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_DISABLE);
|
||||
if (err)
|
||||
psmouse_warn(psmouse, "failed to deactivate mouse on %s: %d\n",
|
||||
psmouse->ps2dev.serio->phys, err);
|
||||
|
||||
err = ps2_command(&psmouse->ps2dev, NULL, PSMOUSE_CMD_ENABLE);
|
||||
if (err)
|
||||
psmouse_warn(psmouse, "failed to reactivate mouse on %s: %d\n",
|
||||
psmouse->ps2dev.serio->phys, err);
|
||||
}
|
||||
|
||||
if (elantech_set_absolute_mode(psmouse)) {
|
||||
psmouse_err(psmouse,
|
||||
"failed to put touchpad back into absolute mode.\n");
|
||||
|
@ -57,7 +57,7 @@
|
||||
#define SILEAD_POINT_Y_MSB_OFF 0x01
|
||||
#define SILEAD_POINT_X_OFF 0x02
|
||||
#define SILEAD_POINT_X_MSB_OFF 0x03
|
||||
#define SILEAD_TOUCH_ID_MASK 0xF0
|
||||
#define SILEAD_EXTRA_DATA_MASK 0xF0
|
||||
|
||||
#define SILEAD_CMD_SLEEP_MIN 10000
|
||||
#define SILEAD_CMD_SLEEP_MAX 20000
|
||||
@ -78,7 +78,6 @@ struct silead_ts_data {
|
||||
struct regulator_bulk_data regulators[2];
|
||||
char fw_name[64];
|
||||
struct touchscreen_properties prop;
|
||||
u32 max_fingers;
|
||||
u32 chip_id;
|
||||
struct input_mt_pos pos[SILEAD_MAX_FINGERS];
|
||||
int slots[SILEAD_MAX_FINGERS];
|
||||
@ -106,10 +105,13 @@ static int silead_ts_request_input_dev(struct silead_ts_data *data)
|
||||
input_set_abs_params(data->input, ABS_MT_POSITION_Y, 0, 4095, 0, 0);
|
||||
touchscreen_parse_properties(data->input, true, &data->prop);
|
||||
|
||||
input_mt_init_slots(data->input, data->max_fingers,
|
||||
input_mt_init_slots(data->input, SILEAD_MAX_FINGERS,
|
||||
INPUT_MT_DIRECT | INPUT_MT_DROP_UNUSED |
|
||||
INPUT_MT_TRACK);
|
||||
|
||||
if (device_property_read_bool(dev, "silead,home-button"))
|
||||
input_set_capability(data->input, EV_KEY, KEY_LEFTMETA);
|
||||
|
||||
data->input->name = SILEAD_TS_NAME;
|
||||
data->input->phys = "input/ts";
|
||||
data->input->id.bustype = BUS_I2C;
|
||||
@ -140,7 +142,8 @@ static void silead_ts_read_data(struct i2c_client *client)
|
||||
struct input_dev *input = data->input;
|
||||
struct device *dev = &client->dev;
|
||||
u8 *bufp, buf[SILEAD_TS_DATA_LEN];
|
||||
int touch_nr, error, i;
|
||||
int touch_nr, softbutton, error, i;
|
||||
bool softbutton_pressed = false;
|
||||
|
||||
error = i2c_smbus_read_i2c_block_data(client, SILEAD_REG_DATA,
|
||||
SILEAD_TS_DATA_LEN, buf);
|
||||
@ -149,21 +152,40 @@ static void silead_ts_read_data(struct i2c_client *client)
|
||||
return;
|
||||
}
|
||||
|
||||
touch_nr = buf[0];
|
||||
if (touch_nr > data->max_fingers) {
|
||||
if (buf[0] > SILEAD_MAX_FINGERS) {
|
||||
dev_warn(dev, "More touches reported then supported %d > %d\n",
|
||||
touch_nr, data->max_fingers);
|
||||
touch_nr = data->max_fingers;
|
||||
buf[0], SILEAD_MAX_FINGERS);
|
||||
buf[0] = SILEAD_MAX_FINGERS;
|
||||
}
|
||||
|
||||
touch_nr = 0;
|
||||
bufp = buf + SILEAD_POINT_DATA_LEN;
|
||||
for (i = 0; i < touch_nr; i++, bufp += SILEAD_POINT_DATA_LEN) {
|
||||
/* Bits 4-7 are the touch id */
|
||||
data->id[i] = (bufp[SILEAD_POINT_X_MSB_OFF] &
|
||||
SILEAD_TOUCH_ID_MASK) >> 4;
|
||||
touchscreen_set_mt_pos(&data->pos[i], &data->prop,
|
||||
for (i = 0; i < buf[0]; i++, bufp += SILEAD_POINT_DATA_LEN) {
|
||||
softbutton = (bufp[SILEAD_POINT_Y_MSB_OFF] &
|
||||
SILEAD_EXTRA_DATA_MASK) >> 4;
|
||||
|
||||
if (softbutton) {
|
||||
/*
|
||||
* For now only respond to softbutton == 0x01, some
|
||||
* tablets *without* a capacative button send 0x04
|
||||
* when crossing the edges of the screen.
|
||||
*/
|
||||
if (softbutton == 0x01)
|
||||
softbutton_pressed = true;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
/*
|
||||
* Bits 4-7 are the touch id, note not all models have
|
||||
* hardware touch ids so atm we don't use these.
|
||||
*/
|
||||
data->id[touch_nr] = (bufp[SILEAD_POINT_X_MSB_OFF] &
|
||||
SILEAD_EXTRA_DATA_MASK) >> 4;
|
||||
touchscreen_set_mt_pos(&data->pos[touch_nr], &data->prop,
|
||||
get_unaligned_le16(&bufp[SILEAD_POINT_X_OFF]) & 0xfff,
|
||||
get_unaligned_le16(&bufp[SILEAD_POINT_Y_OFF]) & 0xfff);
|
||||
touch_nr++;
|
||||
}
|
||||
|
||||
input_mt_assign_slots(input, data->slots, data->pos, touch_nr, 0);
|
||||
@ -179,12 +201,12 @@ static void silead_ts_read_data(struct i2c_client *client)
|
||||
}
|
||||
|
||||
input_mt_sync_frame(input);
|
||||
input_report_key(input, KEY_LEFTMETA, softbutton_pressed);
|
||||
input_sync(input);
|
||||
}
|
||||
|
||||
static int silead_ts_init(struct i2c_client *client)
|
||||
{
|
||||
struct silead_ts_data *data = i2c_get_clientdata(client);
|
||||
int error;
|
||||
|
||||
error = i2c_smbus_write_byte_data(client, SILEAD_REG_RESET,
|
||||
@ -194,7 +216,7 @@ static int silead_ts_init(struct i2c_client *client)
|
||||
usleep_range(SILEAD_CMD_SLEEP_MIN, SILEAD_CMD_SLEEP_MAX);
|
||||
|
||||
error = i2c_smbus_write_byte_data(client, SILEAD_REG_TOUCH_NR,
|
||||
data->max_fingers);
|
||||
SILEAD_MAX_FINGERS);
|
||||
if (error)
|
||||
goto i2c_write_err;
|
||||
usleep_range(SILEAD_CMD_SLEEP_MIN, SILEAD_CMD_SLEEP_MAX);
|
||||
@ -421,13 +443,6 @@ static void silead_ts_read_props(struct i2c_client *client)
|
||||
const char *str;
|
||||
int error;
|
||||
|
||||
error = device_property_read_u32(dev, "silead,max-fingers",
|
||||
&data->max_fingers);
|
||||
if (error) {
|
||||
dev_dbg(dev, "Max fingers read error %d\n", error);
|
||||
data->max_fingers = 5; /* Most devices handle up-to 5 fingers */
|
||||
}
|
||||
|
||||
error = device_property_read_string(dev, "firmware-name", &str);
|
||||
if (!error)
|
||||
snprintf(data->fw_name, sizeof(data->fw_name),
|
||||
|
@ -271,7 +271,7 @@ static ssize_t mei_write(struct file *file, const char __user *ubuf,
|
||||
}
|
||||
|
||||
if (!mei_cl_is_connected(cl)) {
|
||||
cl_err(dev, cl, "is not connected");
|
||||
cl_dbg(dev, cl, "is not connected");
|
||||
rets = -ENODEV;
|
||||
goto out;
|
||||
}
|
||||
|
@ -1326,6 +1326,8 @@ static const struct usb_device_id products[] = {
|
||||
{QMI_QUIRK_SET_DTR(0x1bc7, 0x1260, 2)}, /* Telit LE910Cx */
|
||||
{QMI_QUIRK_SET_DTR(0x1bc7, 0x1261, 2)}, /* Telit LE910Cx */
|
||||
{QMI_QUIRK_SET_DTR(0x1bc7, 0x1900, 1)}, /* Telit LN940 series */
|
||||
{QMI_QUIRK_SET_DTR(0x1bc7, 0x3000, 0)}, /* Telit FN912 series */
|
||||
{QMI_QUIRK_SET_DTR(0x1bc7, 0x3001, 0)}, /* Telit FN912 series */
|
||||
{QMI_FIXED_INTF(0x1c9e, 0x9801, 3)}, /* Telewell TW-3G HSPA+ */
|
||||
{QMI_FIXED_INTF(0x1c9e, 0x9803, 4)}, /* Telewell TW-3G HSPA+ */
|
||||
{QMI_FIXED_INTF(0x1c9e, 0x9b01, 3)}, /* XS Stick W100-2 from 4G Systems */
|
||||
|
@ -1187,6 +1187,7 @@ sclp_init(void)
|
||||
fail_unregister_reboot_notifier:
|
||||
unregister_reboot_notifier(&sclp_reboot_notifier);
|
||||
fail_init_state_uninitialized:
|
||||
list_del(&sclp_state_change_event.list);
|
||||
sclp_init_state = sclp_init_state_uninitialized;
|
||||
fail_unlock:
|
||||
spin_unlock_irqrestore(&sclp_lock, flags);
|
||||
|
@ -3046,6 +3046,7 @@ static int __qedf_probe(struct pci_dev *pdev, int mode)
|
||||
}
|
||||
|
||||
/* Start the Slowpath-process */
|
||||
memset(&slowpath_params, 0, sizeof(struct qed_slowpath_params));
|
||||
slowpath_params.int_mode = QED_INT_MODE_MSIX;
|
||||
slowpath_params.drv_major = QEDF_DRIVER_MAJOR_VER;
|
||||
slowpath_params.drv_minor = QEDF_DRIVER_MINOR_VER;
|
||||
|
@ -908,7 +908,7 @@ static struct spi_imx_devtype_data imx35_cspi_devtype_data = {
|
||||
.rx_available = mx31_rx_available,
|
||||
.reset = mx31_reset,
|
||||
.fifo_size = 8,
|
||||
.has_dmamode = true,
|
||||
.has_dmamode = false,
|
||||
.dynamic_burst = false,
|
||||
.devtype = IMX35_CSPI,
|
||||
};
|
||||
|
31
fs/dcache.c
31
fs/dcache.c
@ -3538,28 +3538,25 @@ out:
|
||||
|
||||
bool is_subdir(struct dentry *new_dentry, struct dentry *old_dentry)
|
||||
{
|
||||
bool result;
|
||||
bool subdir;
|
||||
unsigned seq;
|
||||
|
||||
if (new_dentry == old_dentry)
|
||||
return true;
|
||||
|
||||
do {
|
||||
/* for restarting inner loop in case of seq retry */
|
||||
seq = read_seqbegin(&rename_lock);
|
||||
/*
|
||||
* Need rcu_readlock to protect against the d_parent trashing
|
||||
* due to d_move
|
||||
*/
|
||||
rcu_read_lock();
|
||||
if (d_ancestor(old_dentry, new_dentry))
|
||||
result = true;
|
||||
else
|
||||
result = false;
|
||||
rcu_read_unlock();
|
||||
} while (read_seqretry(&rename_lock, seq));
|
||||
|
||||
return result;
|
||||
/* Access d_parent under rcu as d_move() may change it. */
|
||||
rcu_read_lock();
|
||||
seq = read_seqbegin(&rename_lock);
|
||||
subdir = d_ancestor(old_dentry, new_dentry);
|
||||
/* Try lockless once... */
|
||||
if (read_seqretry(&rename_lock, seq)) {
|
||||
/* ...else acquire lock for progress even on deep chains. */
|
||||
read_seqlock_excl(&rename_lock);
|
||||
subdir = d_ancestor(old_dentry, new_dentry);
|
||||
read_sequnlock_excl(&rename_lock);
|
||||
}
|
||||
rcu_read_unlock();
|
||||
return subdir;
|
||||
}
|
||||
|
||||
static enum d_walk_ret d_genocide_kill(void *data, struct dentry *dentry)
|
||||
|
@ -467,12 +467,12 @@ struct files_struct init_files = {
|
||||
|
||||
static unsigned int find_next_fd(struct fdtable *fdt, unsigned int start)
|
||||
{
|
||||
unsigned int maxfd = fdt->max_fds;
|
||||
unsigned int maxfd = fdt->max_fds; /* always multiple of BITS_PER_LONG */
|
||||
unsigned int maxbit = maxfd / BITS_PER_LONG;
|
||||
unsigned int bitbit = start / BITS_PER_LONG;
|
||||
|
||||
bitbit = find_next_zero_bit(fdt->full_fds_bits, maxbit, bitbit) * BITS_PER_LONG;
|
||||
if (bitbit > maxfd)
|
||||
if (bitbit >= maxfd)
|
||||
return maxfd;
|
||||
if (bitbit > start)
|
||||
start = bitbit;
|
||||
|
@ -706,7 +706,7 @@ ssize_t hfsplus_listxattr(struct dentry *dentry, char *buffer, size_t size)
|
||||
return err;
|
||||
}
|
||||
|
||||
strbuf = kmalloc(NLS_MAX_CHARSET_SIZE * HFSPLUS_ATTR_MAX_STRLEN +
|
||||
strbuf = kzalloc(NLS_MAX_CHARSET_SIZE * HFSPLUS_ATTR_MAX_STRLEN +
|
||||
XATTR_MAC_OSX_PREFIX_LEN + 1, GFP_KERNEL);
|
||||
if (!strbuf) {
|
||||
res = -ENOMEM;
|
||||
|
@ -810,7 +810,7 @@ ssize_t __jfs_getxattr(struct inode *inode, const char *name, void *data,
|
||||
size_t buf_size)
|
||||
{
|
||||
struct jfs_ea_list *ealist;
|
||||
struct jfs_ea *ea;
|
||||
struct jfs_ea *ea, *ealist_end;
|
||||
struct ea_buffer ea_buf;
|
||||
int xattr_size;
|
||||
ssize_t size;
|
||||
@ -830,9 +830,16 @@ ssize_t __jfs_getxattr(struct inode *inode, const char *name, void *data,
|
||||
goto not_found;
|
||||
|
||||
ealist = (struct jfs_ea_list *) ea_buf.xattr;
|
||||
ealist_end = END_EALIST(ealist);
|
||||
|
||||
/* Find the named attribute */
|
||||
for (ea = FIRST_EA(ealist); ea < END_EALIST(ealist); ea = NEXT_EA(ea))
|
||||
for (ea = FIRST_EA(ealist); ea < ealist_end; ea = NEXT_EA(ea)) {
|
||||
if (unlikely(ea + 1 > ealist_end) ||
|
||||
unlikely(NEXT_EA(ea) > ealist_end)) {
|
||||
size = -EUCLEAN;
|
||||
goto release;
|
||||
}
|
||||
|
||||
if ((namelen == ea->namelen) &&
|
||||
memcmp(name, ea->name, namelen) == 0) {
|
||||
/* Found it */
|
||||
@ -847,6 +854,7 @@ ssize_t __jfs_getxattr(struct inode *inode, const char *name, void *data,
|
||||
memcpy(data, value, size);
|
||||
goto release;
|
||||
}
|
||||
}
|
||||
not_found:
|
||||
size = -ENODATA;
|
||||
release:
|
||||
@ -874,7 +882,7 @@ ssize_t jfs_listxattr(struct dentry * dentry, char *data, size_t buf_size)
|
||||
ssize_t size = 0;
|
||||
int xattr_size;
|
||||
struct jfs_ea_list *ealist;
|
||||
struct jfs_ea *ea;
|
||||
struct jfs_ea *ea, *ealist_end;
|
||||
struct ea_buffer ea_buf;
|
||||
|
||||
down_read(&JFS_IP(inode)->xattr_sem);
|
||||
@ -889,9 +897,16 @@ ssize_t jfs_listxattr(struct dentry * dentry, char *data, size_t buf_size)
|
||||
goto release;
|
||||
|
||||
ealist = (struct jfs_ea_list *) ea_buf.xattr;
|
||||
ealist_end = END_EALIST(ealist);
|
||||
|
||||
/* compute required size of list */
|
||||
for (ea = FIRST_EA(ealist); ea < END_EALIST(ealist); ea = NEXT_EA(ea)) {
|
||||
for (ea = FIRST_EA(ealist); ea < ealist_end; ea = NEXT_EA(ea)) {
|
||||
if (unlikely(ea + 1 > ealist_end) ||
|
||||
unlikely(NEXT_EA(ea) > ealist_end)) {
|
||||
size = -EUCLEAN;
|
||||
goto release;
|
||||
}
|
||||
|
||||
if (can_list(ea))
|
||||
size += name_size(ea) + 1;
|
||||
}
|
||||
|
18
fs/locks.c
18
fs/locks.c
@ -2308,8 +2308,9 @@ int fcntl_setlk(unsigned int fd, struct file *filp, unsigned int cmd,
|
||||
error = do_lock_file_wait(filp, cmd, file_lock);
|
||||
|
||||
/*
|
||||
* Attempt to detect a close/fcntl race and recover by releasing the
|
||||
* lock that was just acquired. There is no need to do that when we're
|
||||
* Detect close/fcntl races and recover by zapping all POSIX locks
|
||||
* associated with this file and our files_struct, just like on
|
||||
* filp_flush(). There is no need to do that when we're
|
||||
* unlocking though, or for OFD locks.
|
||||
*/
|
||||
if (!error && file_lock->fl_type != F_UNLCK &&
|
||||
@ -2323,9 +2324,7 @@ int fcntl_setlk(unsigned int fd, struct file *filp, unsigned int cmd,
|
||||
f = fcheck(fd);
|
||||
spin_unlock(¤t->files->file_lock);
|
||||
if (f != filp) {
|
||||
file_lock->fl_type = F_UNLCK;
|
||||
error = do_lock_file_wait(filp, cmd, file_lock);
|
||||
WARN_ON_ONCE(error);
|
||||
locks_remove_posix(filp, ¤t->files);
|
||||
error = -EBADF;
|
||||
}
|
||||
}
|
||||
@ -2439,8 +2438,9 @@ int fcntl_setlk64(unsigned int fd, struct file *filp, unsigned int cmd,
|
||||
error = do_lock_file_wait(filp, cmd, file_lock);
|
||||
|
||||
/*
|
||||
* Attempt to detect a close/fcntl race and recover by releasing the
|
||||
* lock that was just acquired. There is no need to do that when we're
|
||||
* Detect close/fcntl races and recover by zapping all POSIX locks
|
||||
* associated with this file and our files_struct, just like on
|
||||
* filp_flush(). There is no need to do that when we're
|
||||
* unlocking though, or for OFD locks.
|
||||
*/
|
||||
if (!error && file_lock->fl_type != F_UNLCK &&
|
||||
@ -2454,9 +2454,7 @@ int fcntl_setlk64(unsigned int fd, struct file *filp, unsigned int cmd,
|
||||
f = fcheck(fd);
|
||||
spin_unlock(¤t->files->file_lock);
|
||||
if (f != filp) {
|
||||
file_lock->fl_type = F_UNLCK;
|
||||
error = do_lock_file_wait(filp, cmd, file_lock);
|
||||
WARN_ON_ONCE(error);
|
||||
locks_remove_posix(filp, ¤t->files);
|
||||
error = -EBADF;
|
||||
}
|
||||
}
|
||||
|
@ -313,13 +313,16 @@ out:
|
||||
* bh passed here can be an inode block or a dir data block, depending
|
||||
* on the inode inline data flag.
|
||||
*/
|
||||
static int ocfs2_check_dir_entry(struct inode * dir,
|
||||
struct ocfs2_dir_entry * de,
|
||||
struct buffer_head * bh,
|
||||
static int ocfs2_check_dir_entry(struct inode *dir,
|
||||
struct ocfs2_dir_entry *de,
|
||||
struct buffer_head *bh,
|
||||
char *buf,
|
||||
unsigned int size,
|
||||
unsigned long offset)
|
||||
{
|
||||
const char *error_msg = NULL;
|
||||
const int rlen = le16_to_cpu(de->rec_len);
|
||||
const unsigned long next_offset = ((char *) de - buf) + rlen;
|
||||
|
||||
if (unlikely(rlen < OCFS2_DIR_REC_LEN(1)))
|
||||
error_msg = "rec_len is smaller than minimal";
|
||||
@ -327,9 +330,11 @@ static int ocfs2_check_dir_entry(struct inode * dir,
|
||||
error_msg = "rec_len % 4 != 0";
|
||||
else if (unlikely(rlen < OCFS2_DIR_REC_LEN(de->name_len)))
|
||||
error_msg = "rec_len is too small for name_len";
|
||||
else if (unlikely(
|
||||
((char *) de - bh->b_data) + rlen > dir->i_sb->s_blocksize))
|
||||
error_msg = "directory entry across blocks";
|
||||
else if (unlikely(next_offset > size))
|
||||
error_msg = "directory entry overrun";
|
||||
else if (unlikely(next_offset > size - OCFS2_DIR_REC_LEN(1)) &&
|
||||
next_offset != size)
|
||||
error_msg = "directory entry too close to end";
|
||||
|
||||
if (unlikely(error_msg != NULL))
|
||||
mlog(ML_ERROR, "bad entry in directory #%llu: %s - "
|
||||
@ -371,16 +376,17 @@ static inline int ocfs2_search_dirblock(struct buffer_head *bh,
|
||||
de_buf = first_de;
|
||||
dlimit = de_buf + bytes;
|
||||
|
||||
while (de_buf < dlimit) {
|
||||
while (de_buf < dlimit - OCFS2_DIR_MEMBER_LEN) {
|
||||
/* this code is executed quadratically often */
|
||||
/* do minimal checking `by hand' */
|
||||
|
||||
de = (struct ocfs2_dir_entry *) de_buf;
|
||||
|
||||
if (de_buf + namelen <= dlimit &&
|
||||
if (de->name + namelen <= dlimit &&
|
||||
ocfs2_match(namelen, name, de)) {
|
||||
/* found a match - just to be sure, do a full check */
|
||||
if (!ocfs2_check_dir_entry(dir, de, bh, offset)) {
|
||||
if (!ocfs2_check_dir_entry(dir, de, bh, first_de,
|
||||
bytes, offset)) {
|
||||
ret = -1;
|
||||
goto bail;
|
||||
}
|
||||
@ -1157,7 +1163,7 @@ static int __ocfs2_delete_entry(handle_t *handle, struct inode *dir,
|
||||
pde = NULL;
|
||||
de = (struct ocfs2_dir_entry *) first_de;
|
||||
while (i < bytes) {
|
||||
if (!ocfs2_check_dir_entry(dir, de, bh, i)) {
|
||||
if (!ocfs2_check_dir_entry(dir, de, bh, first_de, bytes, i)) {
|
||||
status = -EIO;
|
||||
mlog_errno(status);
|
||||
goto bail;
|
||||
@ -1657,7 +1663,8 @@ int __ocfs2_add_entry(handle_t *handle,
|
||||
/* These checks should've already been passed by the
|
||||
* prepare function, but I guess we can leave them
|
||||
* here anyway. */
|
||||
if (!ocfs2_check_dir_entry(dir, de, insert_bh, offset)) {
|
||||
if (!ocfs2_check_dir_entry(dir, de, insert_bh, data_start,
|
||||
size, offset)) {
|
||||
retval = -ENOENT;
|
||||
goto bail;
|
||||
}
|
||||
@ -1795,7 +1802,8 @@ static int ocfs2_dir_foreach_blk_id(struct inode *inode,
|
||||
}
|
||||
|
||||
de = (struct ocfs2_dir_entry *) (data->id_data + ctx->pos);
|
||||
if (!ocfs2_check_dir_entry(inode, de, di_bh, ctx->pos)) {
|
||||
if (!ocfs2_check_dir_entry(inode, de, di_bh, (char *)data->id_data,
|
||||
i_size_read(inode), ctx->pos)) {
|
||||
/* On error, skip the f_pos to the end. */
|
||||
ctx->pos = i_size_read(inode);
|
||||
break;
|
||||
@ -1892,7 +1900,8 @@ static int ocfs2_dir_foreach_blk_el(struct inode *inode,
|
||||
while (ctx->pos < i_size_read(inode)
|
||||
&& offset < sb->s_blocksize) {
|
||||
de = (struct ocfs2_dir_entry *) (bh->b_data + offset);
|
||||
if (!ocfs2_check_dir_entry(inode, de, bh, offset)) {
|
||||
if (!ocfs2_check_dir_entry(inode, de, bh, bh->b_data,
|
||||
sb->s_blocksize, offset)) {
|
||||
/* On error, skip the f_pos to the
|
||||
next block. */
|
||||
ctx->pos = (ctx->pos | (sb->s_blocksize - 1)) + 1;
|
||||
@ -3368,7 +3377,7 @@ static int ocfs2_find_dir_space_id(struct inode *dir, struct buffer_head *di_bh,
|
||||
struct super_block *sb = dir->i_sb;
|
||||
struct ocfs2_dinode *di = (struct ocfs2_dinode *)di_bh->b_data;
|
||||
struct ocfs2_dir_entry *de, *last_de = NULL;
|
||||
char *de_buf, *limit;
|
||||
char *first_de, *de_buf, *limit;
|
||||
unsigned long offset = 0;
|
||||
unsigned int rec_len, new_rec_len, free_space = dir->i_sb->s_blocksize;
|
||||
|
||||
@ -3381,14 +3390,16 @@ static int ocfs2_find_dir_space_id(struct inode *dir, struct buffer_head *di_bh,
|
||||
else
|
||||
free_space = dir->i_sb->s_blocksize - i_size_read(dir);
|
||||
|
||||
de_buf = di->id2.i_data.id_data;
|
||||
first_de = di->id2.i_data.id_data;
|
||||
de_buf = first_de;
|
||||
limit = de_buf + i_size_read(dir);
|
||||
rec_len = OCFS2_DIR_REC_LEN(namelen);
|
||||
|
||||
while (de_buf < limit) {
|
||||
de = (struct ocfs2_dir_entry *)de_buf;
|
||||
|
||||
if (!ocfs2_check_dir_entry(dir, de, di_bh, offset)) {
|
||||
if (!ocfs2_check_dir_entry(dir, de, di_bh, first_de,
|
||||
i_size_read(dir), offset)) {
|
||||
ret = -ENOENT;
|
||||
goto out;
|
||||
}
|
||||
@ -3470,7 +3481,8 @@ static int ocfs2_find_dir_space_el(struct inode *dir, const char *name,
|
||||
/* move to next block */
|
||||
de = (struct ocfs2_dir_entry *) bh->b_data;
|
||||
}
|
||||
if (!ocfs2_check_dir_entry(dir, de, bh, offset)) {
|
||||
if (!ocfs2_check_dir_entry(dir, de, bh, bh->b_data, blocksize,
|
||||
offset)) {
|
||||
status = -ENOENT;
|
||||
goto bail;
|
||||
}
|
||||
|
@ -3208,7 +3208,11 @@ void hci_unregister_dev(struct hci_dev *hdev)
|
||||
list_del(&hdev->list);
|
||||
write_unlock(&hci_dev_list_lock);
|
||||
|
||||
cancel_work_sync(&hdev->rx_work);
|
||||
cancel_work_sync(&hdev->cmd_work);
|
||||
cancel_work_sync(&hdev->tx_work);
|
||||
cancel_work_sync(&hdev->power_on);
|
||||
cancel_work_sync(&hdev->error_reset);
|
||||
|
||||
hci_dev_do_close(hdev);
|
||||
|
||||
|
@ -710,7 +710,9 @@ int inet_accept(struct socket *sock, struct socket *newsock, int flags,
|
||||
sock_rps_record_flow(sk2);
|
||||
WARN_ON(!((1 << sk2->sk_state) &
|
||||
(TCPF_ESTABLISHED | TCPF_SYN_RECV |
|
||||
TCPF_CLOSE_WAIT | TCPF_CLOSE)));
|
||||
TCPF_FIN_WAIT1 | TCPF_FIN_WAIT2 |
|
||||
TCPF_CLOSING | TCPF_CLOSE_WAIT |
|
||||
TCPF_CLOSE)));
|
||||
|
||||
sock_graft(sk2, newsock);
|
||||
|
||||
|
@ -55,7 +55,9 @@ static int ila_output(struct net *net, struct sock *sk, struct sk_buff *skb)
|
||||
return orig_dst->lwtstate->orig_output(net, sk, skb);
|
||||
}
|
||||
|
||||
local_bh_disable();
|
||||
dst = dst_cache_get(&ilwt->dst_cache);
|
||||
local_bh_enable();
|
||||
if (unlikely(!dst)) {
|
||||
struct ipv6hdr *ip6h = ipv6_hdr(skb);
|
||||
struct flowi6 fl6;
|
||||
@ -83,8 +85,11 @@ static int ila_output(struct net *net, struct sock *sk, struct sk_buff *skb)
|
||||
goto drop;
|
||||
}
|
||||
|
||||
if (ilwt->connected)
|
||||
if (ilwt->connected) {
|
||||
local_bh_disable();
|
||||
dst_cache_set_ip6(&ilwt->dst_cache, dst, &fl6.saddr);
|
||||
local_bh_enable();
|
||||
}
|
||||
}
|
||||
|
||||
skb_dst_set(skb, dst);
|
||||
|
@ -1452,6 +1452,7 @@ void ieee80211_mesh_init_sdata(struct ieee80211_sub_if_data *sdata)
|
||||
ifmsh->last_preq = jiffies;
|
||||
ifmsh->next_perr = jiffies;
|
||||
ifmsh->csa_role = IEEE80211_MESH_CSA_ROLE_NONE;
|
||||
ifmsh->nonpeer_pm = NL80211_MESH_POWER_ACTIVE;
|
||||
/* Allocate all mesh structures when creating the first mesh interface. */
|
||||
if (!mesh_allocated)
|
||||
ieee80211s_init();
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include <linux/slab.h>
|
||||
#include <linux/export.h>
|
||||
#include <net/mac80211.h>
|
||||
#include <linux/overflow.h>
|
||||
|
||||
#include "ieee80211_i.h"
|
||||
#include "driver-ops.h"
|
||||
@ -592,15 +593,21 @@ static int __ieee80211_start_scan(struct ieee80211_sub_if_data *sdata,
|
||||
local->hw_scan_ies_bufsize *= n_bands;
|
||||
}
|
||||
|
||||
local->hw_scan_req = kmalloc(
|
||||
sizeof(*local->hw_scan_req) +
|
||||
req->n_channels * sizeof(req->channels[0]) +
|
||||
local->hw_scan_ies_bufsize, GFP_KERNEL);
|
||||
local->hw_scan_req = kmalloc(struct_size(local->hw_scan_req,
|
||||
req.channels,
|
||||
req->n_channels) +
|
||||
local->hw_scan_ies_bufsize,
|
||||
GFP_KERNEL);
|
||||
if (!local->hw_scan_req)
|
||||
return -ENOMEM;
|
||||
|
||||
local->hw_scan_req->req.ssids = req->ssids;
|
||||
local->hw_scan_req->req.n_ssids = req->n_ssids;
|
||||
/* None of the channels are actually set
|
||||
* up but let UBSAN know the boundaries.
|
||||
*/
|
||||
local->hw_scan_req->req.n_channels = req->n_channels;
|
||||
|
||||
ies = (u8 *)local->hw_scan_req +
|
||||
sizeof(*local->hw_scan_req) +
|
||||
req->n_channels * sizeof(req->channels[0]);
|
||||
|
@ -42,8 +42,8 @@ void ieee802154_xmit_worker(struct work_struct *work)
|
||||
if (res)
|
||||
goto err_tx;
|
||||
|
||||
dev->stats.tx_packets++;
|
||||
dev->stats.tx_bytes += skb->len;
|
||||
DEV_STATS_INC(dev, tx_packets);
|
||||
DEV_STATS_ADD(dev, tx_bytes, skb->len);
|
||||
|
||||
ieee802154_xmit_complete(&local->hw, skb, false);
|
||||
|
||||
@ -94,8 +94,8 @@ ieee802154_tx(struct ieee802154_local *local, struct sk_buff *skb)
|
||||
goto err_tx;
|
||||
}
|
||||
|
||||
dev->stats.tx_packets++;
|
||||
dev->stats.tx_bytes += len;
|
||||
DEV_STATS_INC(dev, tx_packets);
|
||||
DEV_STATS_ADD(dev, tx_bytes, len);
|
||||
} else {
|
||||
local->tx_skb = skb;
|
||||
queue_work(local->workqueue, &local->tx_work);
|
||||
|
@ -1405,10 +1405,14 @@ int cfg80211_wext_siwscan(struct net_device *dev,
|
||||
wiphy = &rdev->wiphy;
|
||||
|
||||
/* Determine number of channels, needed to allocate creq */
|
||||
if (wreq && wreq->num_channels)
|
||||
if (wreq && wreq->num_channels) {
|
||||
/* Passed from userspace so should be checked */
|
||||
if (unlikely(wreq->num_channels > IW_MAX_FREQUENCIES))
|
||||
return -EINVAL;
|
||||
n_channels = wreq->num_channels;
|
||||
else
|
||||
} else {
|
||||
n_channels = ieee80211_get_num_supported_channels(wiphy);
|
||||
}
|
||||
|
||||
creq = kzalloc(sizeof(*creq) + sizeof(struct cfg80211_ssid) +
|
||||
n_channels * sizeof(void *),
|
||||
|
@ -971,4 +971,8 @@ static inline void debug_gimple_stmt(const_gimple s)
|
||||
#define SET_DECL_MODE(decl, mode) DECL_MODE(decl) = (mode)
|
||||
#endif
|
||||
|
||||
#if BUILDING_GCC_VERSION >= 14000
|
||||
#define last_stmt(x) last_nondebug_stmt(x)
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
@ -333,35 +333,6 @@ static struct expr *expr_eliminate_yn(struct expr *e)
|
||||
return e;
|
||||
}
|
||||
|
||||
/*
|
||||
* bool FOO!=n => FOO
|
||||
*/
|
||||
struct expr *expr_trans_bool(struct expr *e)
|
||||
{
|
||||
if (!e)
|
||||
return NULL;
|
||||
switch (e->type) {
|
||||
case E_AND:
|
||||
case E_OR:
|
||||
case E_NOT:
|
||||
e->left.expr = expr_trans_bool(e->left.expr);
|
||||
e->right.expr = expr_trans_bool(e->right.expr);
|
||||
break;
|
||||
case E_UNEQUAL:
|
||||
// FOO!=n -> FOO
|
||||
if (e->left.sym->type == S_TRISTATE) {
|
||||
if (e->right.sym == &symbol_no) {
|
||||
e->type = E_SYMBOL;
|
||||
e->right.sym = NULL;
|
||||
}
|
||||
}
|
||||
break;
|
||||
default:
|
||||
;
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
/*
|
||||
* e1 || e2 -> ?
|
||||
*/
|
||||
|
@ -211,7 +211,6 @@ struct expr *expr_copy(const struct expr *org);
|
||||
void expr_free(struct expr *e);
|
||||
void expr_eliminate_eq(struct expr **ep1, struct expr **ep2);
|
||||
tristate expr_calc_value(struct expr *e);
|
||||
struct expr *expr_trans_bool(struct expr *e);
|
||||
struct expr *expr_eliminate_dups(struct expr *e);
|
||||
struct expr *expr_transform(struct expr *e);
|
||||
int expr_contains_symbol(struct expr *dep, struct symbol *sym);
|
||||
|
@ -1488,7 +1488,6 @@ int main(int ac, char *av[])
|
||||
|
||||
conf_parse(name);
|
||||
fixup_rootmenu(&rootmenu);
|
||||
conf_read(NULL);
|
||||
|
||||
/* Load the interface and connect signals */
|
||||
init_main_window(glade_file);
|
||||
@ -1496,6 +1495,8 @@ int main(int ac, char *av[])
|
||||
init_left_tree();
|
||||
init_right_tree();
|
||||
|
||||
conf_read(NULL);
|
||||
|
||||
switch (view_mode) {
|
||||
case SINGLE_VIEW:
|
||||
display_tree_part();
|
||||
|
@ -330,8 +330,6 @@ void menu_finalize(struct menu *parent)
|
||||
dep = expr_transform(prop->visible.expr);
|
||||
dep = expr_alloc_and(expr_copy(basedep), dep);
|
||||
dep = expr_eliminate_dups(dep);
|
||||
if (menu->sym && menu->sym->type != S_TRISTATE)
|
||||
dep = expr_trans_bool(dep);
|
||||
prop->visible.expr = dep;
|
||||
if (prop->type == P_SELECT) {
|
||||
struct symbol *es = prop_get_symbol(prop);
|
||||
|
@ -354,6 +354,12 @@ EXPORT_SYMBOL_GPL(snd_dmaengine_pcm_open_request_chan);
|
||||
int snd_dmaengine_pcm_close(struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct dmaengine_pcm_runtime_data *prtd = substream_to_prtd(substream);
|
||||
struct dma_tx_state state;
|
||||
enum dma_status status;
|
||||
|
||||
status = dmaengine_tx_status(prtd->dma_chan, prtd->cookie, &state);
|
||||
if (status == DMA_PAUSED)
|
||||
dmaengine_terminate_async(prtd->dma_chan);
|
||||
|
||||
dmaengine_synchronize(prtd->dma_chan);
|
||||
kfree(prtd);
|
||||
@ -371,6 +377,12 @@ EXPORT_SYMBOL_GPL(snd_dmaengine_pcm_close);
|
||||
int snd_dmaengine_pcm_close_release_chan(struct snd_pcm_substream *substream)
|
||||
{
|
||||
struct dmaengine_pcm_runtime_data *prtd = substream_to_prtd(substream);
|
||||
struct dma_tx_state state;
|
||||
enum dma_status status;
|
||||
|
||||
status = dmaengine_tx_status(prtd->dma_chan, prtd->cookie, &state);
|
||||
if (status == DMA_PAUSED)
|
||||
dmaengine_terminate_async(prtd->dma_chan);
|
||||
|
||||
dmaengine_synchronize(prtd->dma_chan);
|
||||
dma_release_channel(prtd->dma_chan);
|
||||
|
@ -77,14 +77,20 @@ static struct vdso_info
|
||||
ELF(Verdef) *verdef;
|
||||
} vdso_info;
|
||||
|
||||
/* Straight from the ELF specification. */
|
||||
static unsigned long elf_hash(const unsigned char *name)
|
||||
/*
|
||||
* Straight from the ELF specification...and then tweaked slightly, in order to
|
||||
* avoid a few clang warnings.
|
||||
*/
|
||||
static unsigned long elf_hash(const char *name)
|
||||
{
|
||||
unsigned long h = 0, g;
|
||||
while (*name)
|
||||
const unsigned char *uch_name = (const unsigned char *)name;
|
||||
|
||||
while (*uch_name)
|
||||
{
|
||||
h = (h << 4) + *name++;
|
||||
if (g = h & 0xf0000000)
|
||||
h = (h << 4) + *uch_name++;
|
||||
g = h & 0xf0000000;
|
||||
if (g)
|
||||
h ^= g >> 24;
|
||||
h &= ~g;
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ extern void *vdso_sym(const char *version, const char *name);
|
||||
extern void vdso_init_from_sysinfo_ehdr(uintptr_t base);
|
||||
extern void vdso_init_from_auxv(void *auxv);
|
||||
|
||||
/* We need a libc functions... */
|
||||
/* We need some libc functions... */
|
||||
int strcmp(const char *a, const char *b)
|
||||
{
|
||||
/* This implementation is buggy: it never returns -1. */
|
||||
@ -36,6 +36,20 @@ int strcmp(const char *a, const char *b)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* The clang build needs this, although gcc does not.
|
||||
* Stolen from lib/string.c.
|
||||
*/
|
||||
void *memcpy(void *dest, const void *src, size_t count)
|
||||
{
|
||||
char *tmp = dest;
|
||||
const char *s = src;
|
||||
|
||||
while (count--)
|
||||
*tmp++ = *s++;
|
||||
return dest;
|
||||
}
|
||||
|
||||
/* ...and two syscalls. This is x86-specific. */
|
||||
static inline long x86_syscall3(long nr, long a0, long a1, long a2)
|
||||
{
|
||||
@ -72,7 +86,7 @@ void to_base10(char *lastdig, time_t n)
|
||||
}
|
||||
}
|
||||
|
||||
__attribute__((externally_visible)) void c_main(void **stack)
|
||||
void c_main(void **stack)
|
||||
{
|
||||
/* Parse the stack */
|
||||
long argc = (long)*stack;
|
||||
|
Loading…
x
Reference in New Issue
Block a user