diff --git a/.elts/config.yaml b/.elts/config.yaml index 2bb1b0280ccb..90612c7fd1db 100644 --- a/.elts/config.yaml +++ b/.elts/config.yaml @@ -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.316 -version: 4.14.349 +upstream_version: 4.19.317 +version: 4.14.350 diff --git a/.elts/meta/4.14.350.yaml b/.elts/meta/4.14.350.yaml new file mode 100644 index 000000000000..3733d48b0c65 --- /dev/null +++ b/.elts/meta/4.14.350.yaml @@ -0,0 +1,506 @@ +037ba8c484cfe176665b4bdb735a62d8cc7b1b9a: + title: 'Revert "scsi: target: Fix SELinux error when systemd-modules loads the target module"' +378cd84450603623545e9b29cac5445b188b6c0c: + title: 'Revert "tcp: defer shutdown(SEND_SHUTDOWN) for TCP_SYN_RECV sockets"' +2e31c6f2136246110bfbd82c25ec9ecbf4169729: + title: 'Revert "tcp: remove redundant check on tskb"' +9dd807b0452a622f5a5547b451eda30befa3d61d: + title: 'tcp: defer shutdown(SEND_SHUTDOWN) for TCP_SYN_RECV sockets' + mainline: 94062790aedb505bdda209b10bea47b294d6394f +a57e28b291e0ad50d1c6ceba6a7cb556fdf1faf6: + title: 'wifi: mac80211: mesh: Fix leak of mesh_preq_queue objects' + mainline: b7d7f11a291830fdf69d3301075dd0fb347ced84 + upstream: 377dbb220edc8421b7960691876c5b3bef62f89b +9feb2600c4ba32c9fb136d7b5e16ca06c853ea8c: + title: 'wifi: mac80211: Fix deadlock in ieee80211_sta_ps_deliver_wakeup()' + mainline: 44c06bbde6443de206b30f513100b5670b23fc5e + upstream: e51637e0c66a6f72d134d9f95daa47ea62b43c7e +79e590b3651e9074489976e737e7fc1255a6cd79: + title: 'wifi: iwlwifi: mvm: don''t read past the mfuart notifcation' + mainline: 4bb95f4535489ed830cf9b34b0a891e384d1aee4 + upstream: 15b37c6fab9d5e40ac399fa1c725118588ed649c +9ba19e227817b86f1032cc551912a049b62ba7e6: + title: 'ipv6: sr: block BH in seg6_output_core() and seg6_input_core()' + mainline: c0b98ac1cc104f48763cdb27b1e9ac25fd81fc90 + upstream: 6330fe95e59bc1de5ad3ebd89e379d785c7c6fc0 +7c79a301b097797b8edd46b11a888a287e281f98: + title: 'vxlan: Fix regression when dropping packets due to invalid src addresses' + mainline: 1cd4bc987abb2823836cbb8f887026011ccddc8a + upstream: ddd44dc20554c38450204df47f8422c7fec78f2d +54f3a87336ada67c8a8da26f7575d12c5ca85bfb: + title: 'tcp: count CLOSE-WAIT sockets for TCP_MIB_CURRESTAB' + mainline: a46d0ea5c94205f40ecf912d1bb7806a8a64704f + upstream: 25dec34bfd770f444409b3228f90f64feb6804f6 +7a5ce9a4d73421a553e354ee6eb5de1a3bffeae5: + title: 'ptp: Fix error message on failed pin verification' + mainline: 323a359f9b077f382f4483023d096a4d316fd135 + upstream: e468462fe0efdd233b6fd7b978e9911bb1eb8614 +4d194b485b1878813b072bc174b6443164b96fb1: + title: 'af_unix: ensure POLLOUT on remote close() for connected dgram socket' +003de6abbdca3c2d230bd4ce3adc752b5eb4982c: + title: 'af_unix: Fix a data-race in unix_dgram_peer_wake_me().' + mainline: 662a80946ce13633ae90a55379f1346c10f0c432 +4379c4db8fa9f7d4adfdf7256277c96ac968a690: + title: 'af_unix: Annotate data-race of sk->sk_state in unix_inq_len().' + mainline: 3a0f38eb285c8c2eead4b3230c7ac2983707599d + upstream: 5c91a2f308cabf7cc0e30997455ac15926199987 +03b7c75271f457de1fc83095624428cd9ef74db4: + title: 'af_unix: Fix data races around sk->sk_shutdown.' + mainline: e1d09c2c2f5793474556b60f83900e088d0d366d +089da5e3914abb4806b03eff85aeb895c0ab860b: + title: 'af_unix: Annotate data-races around sk->sk_state in unix_write_space() and poll().' + mainline: eb0718fb3e97ad0d6f4529b810103451c90adf94 + upstream: 6b4dffb64e98b9eacc7c214056146d32642f7e8a +c6f96daa0536f49a7d624196dbc3defc536eacdb: + title: 'af_unix: Annotate data-races around sk->sk_state in sendmsg() and recvmsg().' + mainline: 8a34d4e8d9742a24f74998f45a6a98edd923319b + upstream: 7cd9dd08be2482bd1015642b61d97a187af5a774 +cab04acca50227f3f27fb5616bee123fea171762: + title: 'af_unix: Annotate data-races around sk->sk_state in UNIX_DIAG.' + mainline: 0aa3be7b3e1f8f997312cc4705f8165e02806f8f + upstream: 123d798351c96a15456478558fccac0eb766f26d +98e2f1cec1532524595d79af5c86ed370debd735: + title: 'af_unix: Annotate data-race of net->unx.sysctl_max_dgram_qlen.' + mainline: bd9f2d05731f6a112d0c7391a0d537bfc588dbe6 + upstream: f5cf5e139ec736f1ac18cda8d5e5fc80d7eef787 +15baad6e966a2478052b6e2efd0153a9e9a9e0c2: + title: 'af_unix: Use unix_recvq_full_lockless() in unix_stream_connect().' + mainline: 45d872f0e65593176d880ec148f41ad7c02e40a7 + upstream: b56ff0d20a4a60b9e6424d0609acccbbde573ea8 +a8d1038ecf162678372a6f5686eabbf0c070ec91: + title: 'af_unix: Use skb_queue_len_lockless() in sk_diag_show_rqlen().' + mainline: 5d915e584d8408211d4567c22685aae8820bfc55 + upstream: 141826272a2cd16436f9b6c241cf88b72feddb3b +669958a2bdd8b94c6bbe1df7c83feae7b844afb3: + title: 'af_unix: Annotate data-race of sk->sk_shutdown in sk_diag_fill().' + mainline: efaf24e30ec39ebbea9112227485805a48b0ceb1 + upstream: 9c2d206ddc697595ceb0e8e356c64f9e845a0c2f +77067622d8f27240f3e5438767cce7317f8b9c34: + title: 'usb: gadget: f_fs: Fix race between aio_cancel() and AIO request complete' + mainline: 24729b307eefcd7c476065cd7351c1a018082c19 + upstream: f71a53148ce34898fef099b75386a3a9f4449311 +6c20d50e094e8b67aab06f29f7e97351bbfef601: + title: 'serial: sc16is7xx: replace hardcoded divisor value with BIT() macro' + mainline: 2e57cefc4477659527f7adab1f87cdbf60ef1ae6 + upstream: 9dcb6eb967fe778d1d985a709ac4030895603fc0 +f966c6e6aa0166c853782a705ae5389f8c6b24e7: + title: 'serial: sc16is7xx: fix bug in sc16is7xx_set_baud() when using prescaler' + mainline: 8492bd91aa055907c67ef04f2b56f6dadd1f44bf + upstream: 2b14e818ef3e49741ee60a317554222c6af3a800 +41d740fdbcb6d45f86ec6cd7238ba2ca38df8824: + title: 'media: mc: mark the media devnode as registered from the, start' + mainline: 4bc60736154bc9e0e39d3b88918f5d3762ebe5e0 + upstream: d3f6dc1155a09bc2c212b734c3ff01a046490e92 +fe9a3e689a0275a21eae214693dd7ddbdbb63cec: + title: 'selftests/mm: compaction_test: fix incorrect write of zero to nr_hugepages' + mainline: 9ad665ef55eaad1ead1406a58a34f615a7c18b5e + upstream: 62b71327cf1af11ceb4a3f53ebf0c85cb9ad3db8 +75614587972465759b313027993c87e60eeb446f: + title: 'selftests/mm: conform test to TAP format output' + mainline: 9a21701edc41465de56f97914741bfb7bfc2517d + upstream: 4a4f88dcf8b688db0cf527362ebf4db0d272a3f6 +6132af7d247da481d1f4e99c91f5fdc29961bce3: + title: 'selftests/mm: compaction_test: fix bogus test success on Aarch64' + mainline: d4202e66a4b1fe6968f17f9f09bbc30d08f028a1 + upstream: 4d5f7ab71a24f17311d361f47c61cc49064e1dd0 +71bf6edd5d5c1384f56efcc445146a367f1e7c38: + title: 'nilfs2: Remove check for PageError' + mainline: 79ea65563ad8aaab309d61eeb4d5019dd6cf5fa0 + upstream: c158e493640ce76e76241f0529cebe19770ba5b2 +52c1c33e0dafbe82538c326d4a6144544e9501f4: + title: 'nilfs2: return the mapped address from nilfs_get_page()' + mainline: 09a46acb3697e50548bb265afa1d79163659dd85 + upstream: 7ed62ec616a3441aa3859150d50fadf5fd117aa8 +c5682abd08cb2a8960de840d00ce1efc5066286e: + title: 'nilfs2: fix nilfs_empty_dir() misjudgment and long loop on I/O errors' + mainline: 7373a51e7998b508af7136530f3a997b286ce81c + upstream: 2ac8a2fe22bdde9eecce2a42cf5cab79333fb428 +ac2c307a0180583e260719f923ba2edabddea919: + title: 'USB: class: cdc-wdm: Fix CPU lockup caused by excessive log messages' + mainline: 22f00812862564b314784167a89f27b444f82a46 + upstream: 217d1f44fff560b3995a685a60aa66e55a7f0f56 +6f5dcde17cd2c15cb9812b4441ab1ba7088ccf0c: + title: 'mei: me: release irq in mei_me_pci_resume error path' + mainline: 283cb234ef95d94c61f59e1cd070cd9499b51292 + upstream: 83c2321411d8bb8f832dbb482ea3387ac1322542 +79cb0bb1b0e2cbed9eaec6f1fb7ce81baf278a39: + title: 'jfs: xattr: fix buffer overflow for invalid xattr' + mainline: 7c55b78818cfb732680c4a72ab270cc2d2ee3d0f + upstream: f0dedb5c511ed82cbaff4997a8decf2351ba549f +b8b14f255f86c39eee93bc4fbc4c8f6c3f9da875: + title: 'xhci: Apply reset resume quirk to Etron EJ188 xHCI host' + mainline: 17bd54555c2aaecfdb38e2734149f684a73fa584 + upstream: a2ddc0475c4c6fff5b9eac0e0eb4726640925e1b +41c568e13eb14e46c634292e403a4652603b2d46: + title: 'xhci: Apply broken streams quirk to Etron EJ188 xHCI host' + mainline: 91f7a1524a92c70ffe264db8bdfa075f15bbbeb9 + upstream: 5c08d8bcc6f20965d665a6122a3fe60eba042e74 +abe1fafad8d912b27028e91a0040650149ab4ab8: + title: 'Input: try trimming too long modalias strings' + mainline: 0774d19038c496f0c3602fb505c43e1b2d8eed85 + upstream: d9bbbbf1a2cac25fafa44ba09d2ab8f5365c0a06 +c0be0c4967c8b988f9603c7b7cecc01379071c67: + title: 'HID: core: remove unnecessary WARN_ON() in implement()' + mainline: 4aa2dcfbad538adf7becd0034a3754e1bd01b2b5 + upstream: 955b3764671f3f157215194972d9c01a3a4bd316 +2cb6663051a21277c7bdf9695ad8a04fc6a5dc7a: + title: 'iommu/amd: Fix sysfs leak in iommu init' + mainline: a295ec52c8624883885396fde7b4df1a179627c3 + upstream: 7f66540fcf6f8f66784f739c33f79d2889e95106 +b4722a9d958fe8bd54d0358650bf07b11ab91d4b: + title: 'drm/bridge/panel: Fix runtime warning on panel bridge release' + mainline: ce62600c4dbee8d43b02277669dd91785a9b81d9 + upstream: 3e0daaf28639c6fd22e96eb2f8772ad40e922ee7 +291c8c1e9e291262f9179c0ba5cef2e49df4f142: + title: 'tcp: fix race in tcp_v6_syn_recv_sock()' + mainline: d37fe4255abe8e7b419b90c5847e8ec2b8debb08 + upstream: 06f208ae0670ef97b0bf253a5523863e113026b6 +9ae3694d9677f29e0d8e5bbb86841f69baae279d: + title: 'Bluetooth: L2CAP: Fix rejecting L2CAP_CONN_PARAM_UPDATE_REQ' + mainline: 806a5198c05987b748b50f3d0c0cfb3d417381a4 + upstream: a1f9c8328219b9bb2c29846d6c74ea981e60b5a7 +fab190e5fcd0466de646405bf49ca7017bbdca31: + title: 'ipv6/route: Add a missing check on proc_dointvec' + mainline: f0fb9b288d0a7e9cc324ae362e2dfd2cc2217ded + upstream: f00c343be6f25a6a3736fd6b332c918da57d81d8 +04f57a8a33fef04d61ba56f8b4e830fe0cebc8f2: + title: 'net/ipv6: Fix the RT cache flush via sysctl using a previous delay' + mainline: 14a20e5b4ad998793c5f43b0330d9e1388446cf3 + upstream: ebde6e8a52c68dc45b4ae354e279ba74788579e7 +82d942edbd8b21acbacd1d16eb3cb52d47404384: + title: 'drivers: core: synchronize really_probe() and dev_uevent()' + mainline: c0a40097f0bc81deafc15f9195d1fb54595cd6d0 + upstream: bb3641a5831789d83a58a39ed4a928bcbece7080 +126c475927adda67084f403fee8ec76a853b70fc: + title: 'drm/exynos/vidi: fix memory leak in .get_modes()' + mainline: 38e3825631b1f314b21e3ade00b5a4d737eb054e + upstream: 540ca99729e28dbe902b01039a3b4bd74520a819 +37026b40b51170c1f9b052ef1b1cd19ec815c566: + title: 'vmci: prevent speculation leaks by sanitizing event in event_deliver()' + mainline: 8003f00d895310d409b2bf9ef907c56b42a4e0f4 + upstream: 58730dfbd4ae01c1b022b0d234a8bf8c02cdfb81 +aaea44b590e4a5e853dcc48edbf8ffa6dc611490: + title: 'fs/proc: fix softlockup in __read_vmcore' + mainline: 5cbcb62dddf5346077feb82b7b0c9254222d3445 + upstream: 7bdf1d550ddfcd9ab797087421f77b7aceddc8a7 +c02663a1e56ea3793580a51e2ea012e198661ca1: + title: 'ocfs2: use coarse time for new created files' + mainline: b8cb324277ee16f3eca3055b96fce4735a5a41c6 + upstream: f882e853ea33c1e4f7107387f85879139682b720 +db16f074c58fb04ccb5efd329bd001b3769662b2: + title: 'ocfs2: fix races between hole punching and AIO+DIO' + mainline: 952b023f06a24b2ad6ba67304c4c84d45bea2f18 + upstream: 3c26b5d21b1239e9c7fd31ba7d9b2d7bdbaa68d9 +7932419ef19393d4fc9b05a04583d8c31c2785e3: + title: 'dmaengine: axi-dmac: fix possible race in remove()' + mainline: 1bc31444209c8efae98cb78818131950d9a6f4d6 + upstream: 5226e7062723bd5d4f1bd5e98ace7c1e6c015d57 +c2986a4fcfa961be763f68bb7c55ff808dcbbc63: + title: 'intel_th: pci: Add Granite Rapids support' + mainline: e44937889bdf4ecd1f0c25762b7226406b9b7a69 + upstream: 96185ee73d5cd28c2b19311c87536ffeeb653562 +fbda6dc2f8c85e96d6ae1f5243146a33e627ee9e: + title: 'intel_th: pci: Add Granite Rapids SOC support' + mainline: 854afe461b009801a171b3a49c5f75ea43e4c04c + upstream: 04d47e1fd4e9a9b9c32e769b9106bbcbddeca756 +97c26585440f81fc3832759721964719ae7a4802: + title: 'intel_th: pci: Add Sapphire Rapids SOC support' + mainline: 2e1da7efabe05cb0cf0b358883b2bc89080ed0eb + upstream: f9159b4706fc1eae09c37081f9a580673a4477ff +0d4c32589468be6d7b8993e7576690004f50f5cc: + title: 'intel_th: pci: Add Meteor Lake-S support' + mainline: c4a30def564d75e84718b059d1a62cc79b137cf9 + upstream: 8af7cedc0edf1b9d3c29e2b72e7d643f64669ee4 +eac9744fef5c714c3201a0ab9c56e61ede318c29: + title: 'intel_th: pci: Add Lunar Lake support' + mainline: f866b65322bfbc8fcca13c25f49e1a5c5a93ae4d + upstream: 4780775da4957702ece226104b17d072e557a962 +948b6135a242e4147ee69d7d47e1df20f5951d7f: + title: 'nilfs2: fix potential kernel bug due to lack of writeback flag waiting' + mainline: a4ca369ca221bb7e06c725792ac107f0e48e82e7 + upstream: 95f6f81e50d858a7c9aa7c795ec14a0ac3819118 +22749c2b34a685511b52c8e1c52539519f0a46ec: + title: 'hv_utils: drain the timesync packets on onchannelcallback' + mainline: b46b4a8a57c377b72a98c7930a9f6969d2d4784e + upstream: 1af0a35eba1ee302fc30aea8cb621f6de8728785 +06d15f1e6c6dbb25aa2058c26a02bc3589dd87d7: + title: 'mm/hugetlb: add mmap() encodings for 32MB and 512MB page sizes' +bee6efedbf7b70baa442b7af575c6cc055c2bcef: + title: 'hugetlb_encode.h: fix undefined behaviour (34 << 26)' + mainline: 710bb68c2e3a24512e2d2bae470960d7488e97b1 + upstream: a33d99c8b213d16ad61bc68cb17aad1e2f484192 +ba2eacb9af4998743a14271e11fba297a8761497: + title: 'usb-storage: alauda: Check whether the media is initialized' + mainline: 16637fea001ab3c8df528a8995b3211906165a30 + upstream: e0aab7b07a9375337847c9d74a5ec044071e01c8 +d3d05ae427ca75738046af172544e4ad75bdf8aa: + title: 'rcutorture: Fix rcu_torture_one_read() pipe_count overflow comment' + mainline: 8b9b443fa860276822b25057cb3ff3b28734dec0 + upstream: 6652029853316f4c273219145ef0e71b148bbe01 +5856f70943c52055ea24d8ee791308367cd1039a: + title: 'batman-adv: bypass empty buckets in batadv_purge_orig_ref()' + mainline: 40dc8ab605894acae1473e434944924a22cfaaa0 + upstream: 79636f636126775436a11ee9cf00a9253a33ac11 +f98f3237faf35d508d9c1b783385102a7be0abf2: + title: 'scsi: qedi: Fix crash while reading debugfs attribute' + mainline: 28027ec8e32ecbadcd67623edb290dad61e735b5 + upstream: 56bec63a7fc87ad50b3373a87517dc9770eef9e0 +476276b356c5d338435b82ecfe217a9422d7235f: + title: 'powerpc/pseries: Enforce hcall result buffer validity and size' + mainline: ff2e185cf73df480ec69675936c4ee75a445c3e4 + upstream: acf2b80c31c37acab040baa3cf5f19fbd5140b18 +8824c4818bf4e7a3b2c47f78c6a8ace368ebe2c5: + title: 'powerpc/io: Avoid clang null pointer arithmetic warnings' + mainline: 03c0f2c2b2220fc9cf8785cd7b61d3e71e24a366 + upstream: 7e1e8e86b0b62844b2c795549f65494e95b5983e +43cef40ed1b05181bab0553b15a699a4a3de9dc4: + title: 'usb: misc: uss720: check for incompatible versions of the Belkin F5U002' + mainline: 3295f1b866bfbcabd625511968e8a5c541f9ab32 + upstream: 02d13616ca30014ed96302e51a5b0e17664e58bc +20c569a7cff68ac7d507661d2cbb62dd6fffdc7d: + title: 'udf: Sanitize nanoseconds for time stamps' +04f8c1f355f2e1cdc8bc261bb903c85488dbb649: + title: 'udf: Simplify calls to udf_disk_stamp_to_time' +28e83fb606df2b620ca55001b6b1ec4669fff3fe: + title: 'udf: udftime: prevent overflow in udf_disk_stamp_to_time()' + mainline: 3b84adf460381169c085e4bc09e7b57e9e16db0a + upstream: 2f85b07bd802e86e155fd8496e3d105ec3a2ade9 +7bf7a1b84c85a21b7e9e7dc9136efd5c79d7b4ed: + title: 'MIPS: Octeon: Add PCIe link status check' + mainline: 29b83a64df3b42c88c0338696feb6fdcd7f1f3b7 + upstream: 6bff05aaa32c2f7e1f6e68e890876642159db419 +2401229809147c9144c4e7bbbcc43c7154cf1aba: + title: 'MIPS: Routerboard 532: Fix vendor retry check code' + mainline: ae9daffd9028f2500c9ac1517e46d4f2b57efb80 + upstream: acabc32a7b27f30a75ef01e873d8b65f5dc7d5d5 +2f46065f2784076d6c121eab1a21a8096fba6b13: + title: 'cipso: fix total option length computation' + mainline: 9f36169912331fa035d7b73a91252d7c2512eb1a + upstream: 5d3b9efa04c0d8967e00cbc4b6b5aab79952f5d1 +f5105aa1e9989b1deb6d87f9d080a7d0d917dc56: + title: 'netrom: Fix a memory leak in nr_heartbeat_expiry()' + mainline: 0b9130247f3b6a1122478471ff0e014ea96bb735 + upstream: d616876256b38ecf9a1a1c7d674192c5346bc69c +b71bbdc8869cbf604b55e27437b9d91d3dd909aa: + title: 'xfrm6: check ip6_dst_idev() return value in xfrm6_get_saddr()' + mainline: d46401052c2d5614da8efea5788532f0401cb164 + upstream: c71761292d4d002a8eccb57b86792c4e3b3eb3c7 +e3d1b924da1c094e403381851f287d1cb6d430de: + title: 'virtio_net: checksum offloading handling fix' + mainline: 604141c036e1b636e2a71cf6e1aa09d1e45f40c2 + upstream: d0e99ad7721155aaa4e57b8b11bb70743da61491 +8bfba3c52500198a370f799501c232303b52817c: + title: 'net: usb: rtl8150 fix unintiatilzed variables in rtl8150_get_link_ksettings' + mainline: fba383985354e83474f95f36d7c65feb75dba19d + upstream: 88154e3329e1f47490ee98f8d32a0353d8d46550 +cc48980d16d92c2f4e6c9a1976bd2afdf9f30fa6: + title: 'regulator: core: Fix modpost error "regulator_get_regmap" undefined' + mainline: 3f60497c658d2072714d097a177612d34b34aa3d + upstream: bdc0a40accdf77080fed82d72e89d341001dcbf6 +d7e271c7c6269187a0c054ef781b1160398b119a: + title: 'dmaengine: ioatdma: Fix missing kmem_cache_destroy()' + mainline: 5422145d0b749ad554ada772133b9b20f9fb0ec8 + upstream: 0b346aa39e76de78be5e105dc338e190e80a5188 +ed44c23c974a4df0899e57a375eeb563a911b575: + title: 'ACPICA: Revert "ACPICA: avoid Info: mapping multiple BARs. Your kernel is fine."' + mainline: a83e1385b780d41307433ddbc86e3c528db031f0 + upstream: 435ecc978c3d5d0c4e172ec5b956dc1904061d98 +cc96770672dafa9b46038f64523c42ce3534e8ba: + title: 'drm/radeon: fix UBSAN warning in kv_dpm.c' + mainline: a498df5421fd737d11bfd152428ba6b1c8538321 + upstream: 07e8f15fa16695cf4c90e89854e59af4a760055b +cd513bd7a535592e2c65efc462a42866d507da3a: + title: 'gcov: add support for GCC 14' + mainline: c1558bc57b8e5b4da5d821537cd30e2e660861d8 + upstream: 48d5f4d66962fde59c78dd0a7cf6bd03b3f49c61 +5566df875aabd57002b81daf45d37d2f6c874d42: + title: 'ARM: dts: samsung: smdkv310: fix keypad no-autorepeat' + mainline: 87d8e522d6f5a004f0aa06c0def302df65aff296 + upstream: 1d1838ca012952f4914af6f6619bbdea6251039c +9b2697403d29b12ef06ab68f4f2232291dfed184: + title: 'ARM: dts: samsung: exynos4412-origen: fix keypad no-autorepeat' + mainline: 88208d3cd79821117fd3fb80d9bcab618467d37b + upstream: 77951f880a4b9e7f76460364ec0b931d1a59c9fb +d350b585ee4796a3868be5f4cd8a29877275c819: + title: 'ARM: dts: samsung: smdk4412: fix keypad no-autorepeat' + mainline: 4ac4c1d794e7ff454d191bbdab7585ed8dbf3758 + upstream: 4c70a7576ae14f804196ae0089f9deb6cbd77e1f +dcea2cf5d7cca146641b67b8cbcc153cbfdeb0c3: + title: 'PCI: Add PCI_ERROR_RESPONSE and related definitions' + mainline: 57bdeef4716689d9b0e3571034d65cf420f6efcd + upstream: 4c003aef56d5642aefd4d11ee9d7e6755d4c1a6e +f66ed725b522bfad043ec2dbcf50eff7ffc8feda: + title: 'x86/amd_nb: Check for invalid SMN reads' + mainline: c625dabbf1c4a8e77e4734014f2fde7aa9071a1f + upstream: d4e52b36c73f44d2b5f41d0cd3f57b3d2efbf180 +e8b7b4167c95a9e6976479edda683c1b13ca0832: + title: 'iio: dac: ad5592r-base: Replace indio_dev->mlock with own device lock' + mainline: 33c53cbf8f7bc8d62f6146a19da97c8594376ff0 + upstream: b576d7d08f26d40789313ec6a8acc966a149c37f +a28ae8f66b95e48a7ad69aa23382bd8486b6c529: + title: 'iio: dac: ad5592r: un-indent code-block for scale read' + mainline: b004fe33034cc64f72c20923be71cf1e6c9a624c + upstream: c101996c9dabd9d809c12f686547b7035c087f10 +d9b6601da0310953862e47ebc5fe28f9bf37033a: + title: 'iio: dac: ad5592r: fix temperature channel scaling value' + mainline: 279428df888319bf68f2686934897301a250bb84 + upstream: 9eaaefbae8f5ddbed0fce822042ad969f5f876c5 +675de54c63726a5b6316a7c3854219e10208f4ea: + title: 'scsi: mpt3sas: Add ioc_ logging macros' + mainline: 645a20c6821cd1ab58af8a1f99659e619c216efd + upstream: 229e75730c784f7b871ae9bd76f8bd506d20a304 +bd4e577402b93532aacc19b7f44c4963b763fafe: + title: 'scsi: mpt3sas: Gracefully handle online firmware update' + mainline: ffedeae1fa545a1d07e6827180c3923bf67af59f + upstream: 230c290c74b956a4c26926c94a5bf932ca234884 +165419d81604a14fb6d0b111fd2f96288ec9528b: + title: 'scsi: mpt3sas: Avoid test/set_bit() operating in non-allocated memory' + mainline: 4254dfeda82f20844299dca6c38cbffcfd499f41 + upstream: e9bce7c751f6d6c7be88c0bc081a66aaf61a23ee +d9ea1dc07e87131c9ae5e3e1504c2cacbf2df74a: + title: 'usb: xhci: Remove ep_trb from xhci_cleanup_halted_endpoint()' +de371a2bb30d1695a5c07357bd207e5aadefcd51: + title: 'xhci: Use soft retry to recover faster from transaction errors' + mainline: f8f80be501aa2f10669585c3e328fad079d8cb3a + upstream: 8f667ee530a601449fede56370036e1d8d9a62dc +c73496b00b416467313ec64166d9d8d5d7e3a921: + title: 'xhci: Set correct transferred length for cancelled bulk transfers' + mainline: f0260589b439e2637ad54a2b25f00a516ef28a57 + upstream: ca0f0c5b0b991a71f61948bad09eb5f9e8cc4851 +3f74f1a0bd8b876661fb5263fa78048e2586065d: + title: 'usb: xhci: do not perform Soft Retry for some xHCI hosts' + mainline: a4a251f8c23518899d2078c320cf9ce2fa459c9f + upstream: 2a28c0f457c5563cef9fbad803d9445eee0c1e05 +d6636e9d955f53a9da4e40af4ddba67ab3391fbf: + title: 'pinctrl: fix deadlock in create_pinctrl() when handling -EPROBE_DEFER' + mainline: adec57ff8e66aee632f3dd1f93787c13d112b7a1 + upstream: e65a0dc2e85efb28e182aca50218e8a056d0ce04 +0b45b7f4f6ee46da3efc4858af96e1a86e536250: + title: 'pinctrl: rockchip: fix pinmux bits for RK3328 GPIO2-B pins' + mainline: e8448a6c817c2aa6c6af785b1d45678bd5977e8d + upstream: 860a562a61a838867c8d3f66d059a0fc7a67d1c9 +0d6d13a0bb379aa59f6475c1bb6df7aaed21857f: + title: 'pinctrl: rockchip: fix pinmux bits for RK3328 GPIO3-B pins' + mainline: 5ef6914e0bf578357b4c906ffe6b26e7eedb8ccf + upstream: f8426b53f59f88c637143ffa31276be73a3c9b27 +a1e6c61656a89e49007fd9847fe123acd15d31b9: + title: 'pinctrl: rockchip: fix pinmux reset in rockchip_pmx_set' + mainline: 4ea4d4808e342ddf89ba24b93ffa2057005aaced + upstream: 61c552e4ee1dbfa85d68997ab6e9d80690b401a7 +90340ac06eb8a83a320c3bf2a31cc67eaf333478: + title: 'drm/amdgpu: fix UBSAN warning in kv_dpm.c' + mainline: f0d576f840153392d04b2d52cf3adab8f62e8cb6 + upstream: 4ad7d49059358ceadd352b4e2511425bdb68f400 +f6658c76f5f0670445bebb35a9ccf3d5ae502806: + title: 'ASoC: fsl-asoc-card: set priv->pdev before using it' + mainline: 90f3feb24172185f1832636264943e8b5e289245 + upstream: ae81535ce2503aabc4adab3472f4338070cdeb6a +c01fc5238f6bb561e137d7b6e7df88c5107a263f: + title: 'netfilter: nf_tables: fully validate NFT_DATA_VALUE on store to data registers' + mainline: 7931d32955e09d0a11b1fe0b6aac1bfa061c005c + upstream: 40188a25a9847dbeb7ec67517174a835a677752f +9578df8a6b21442b2451be92ea5ce59b2cc38505: + title: 'net/iucv: Avoid explicit cpumask var allocation on stack' + mainline: be4e1304419c99a164b4c0e101c7c2a756b635b9 + upstream: 2b085521be5292016097b5e7ca81b26be3f7098d +bf4ffd90f46475894c7d758eb26aa0f8a31dc245: + title: 'ALSA: emux: improve patch ioctl data validation' + mainline: 89b32ccb12ae67e630c6453d778ec30a592a212f + upstream: 40d7def67841343c10f8642a41031fecbb248bab +728e947a35ba429d96e495c170367211583d760e: + title: 'media: dvbdev: Initialize sbuf' + mainline: 17d1316de0d7dc1bdc5d6e3ad4efd30a9bf1a381 + upstream: 1925c902159d686372d897c2fa8ee4ea91b62d14 +cf89c5861a3b88fcef8ce222edd384bb5cb44934: + title: 'soc: ti: wkup_m3_ipc: Send NULL dummy message instead of pointer message' + mainline: ddbf3204f600a4d1f153498f618369fca352ae00 + upstream: 671abe2b126e6e39d52eefbf53106650ef2dd904 +43bae0d9a7bd2f0a78a283b1440a74601b4a4f68: + title: 'nvme: fixup comment for nvme RDMA Provider Type' + mainline: f80a55fa90fa76d01e3fffaa5d0413e522ab9a00 + upstream: 277ea9f9bf1171f0f02836ded9b65b9b8684322d +b4951f8134444e1eb7b28ea2234463f8ed077745: + title: 'i2c: ocores: stop transfer on timeout' + mainline: e7663ef5ae0f02e3b902eb0305dec981333eb3e1 + upstream: c7999d372e7fe8bdfbc2226af1896e8bd328018a +4d73d79702f3c0872f20dfd8a05974c7b18ebc7f: + title: 'i2c: ocores: set IACK bit after core is enabled' + mainline: 5a72477273066b5b357801ab2d315ef14949d402 + upstream: 1f7e4dd58af1267db2970e5c2e98a4d0ff170047 +00eda93e9c842eecb76a1bc09b337e4f0cb043eb: + title: 'x86: stop playing stack games in profile_pc()' + mainline: 093d9603b60093a9aaae942db56107f6432a5dca + upstream: 65ebdde16e7f5da99dbf8a548fb635837d78384e +51e44a77a5ca50e7e1f0548960bbb9eea83ff139: + title: 'mmc: sdhci-pci: Convert PCIBIOS_* return codes to errnos' + mainline: ebc4fc34eae8ddfbef49f2bdaced1bf4167ef80d + upstream: bba83bf85fc6fcca1e827fd88bf3998be9ad0d24 +b23dedd4318672a4265f48d90f8760b41b6f7006: + title: 'iio: adc: ad7266: Fix variable checking bug' + mainline: a2b86132955268b2a1703082fbc2d4832fc001b8 + upstream: 75a024d3ab0d331fc1d0b640b00e63d31d556b1e +e4de596e5e18fb924bfe0048049cd04a285272f9: + title: 'net: usb: ax88179_178a: improve link status logs' + mainline: 058722ee350c0bdd664e467156feb2bf5d9cc271 + upstream: abb029e078e149d4d1f44a244cf833a6a1541447 +cbc92ffc360a7b6f16408d7092c71d72bb9e0382: + title: 'usb: gadget: printer: SS+ support' + mainline: fd80731e5e9d1402cb2f85022a6abf9b1982ec5f + upstream: a0886d04f1c7439b55c1c9daecd6b21ada2de5dd +7209de070ba2427bfa29373c649c6311b69580bc: + title: 'usb: musb: da8xx: fix a resource leak in probe()' + mainline: de644a4a86be04ed8a43ef8267d0f7d021941c5e + upstream: a93b97349ba92cdc8b63ad09d28a873a467e1d62 +4ddbe32a34bc9cc18c34282f88488d22c4178071: + title: 'usb: atm: cxacru: fix endpoint checking in cxacru_bind()' + mainline: 2eabb655a968b862bc0c31629a09f0fbf3c80d51 + upstream: 5159a81924311c1ec786ad9fdef784ead8676a6a +c6f828c51833c0dcdd53b79a4eb5c8d5f5ebd56b: + title: 'tty: mcf: MCF54418 has 10 UARTS' + mainline: 7c92a8bd53f24d50c8cf4aba53bb75505b382fed + upstream: 0929fbe8194db19bfeed22f8c7f9b24da9f08bb9 +87cc48eed0c10fc8f13907410db3f1c76c77826b: + title: 'hexagon: fix fadvise64_64 calling conventions' + mainline: 896842284c6ccba25ec9d78b7b6e62cdd507c083 + upstream: 72152ab85ae44e13df8b7a653b5f657b48fa3229 +2dc9769a951e305b690994008bcc32ee0d57f3e2: + title: 'drm/nouveau/dispnv04: fix null pointer dereference in nv17_tv_get_ld_modes' + mainline: 66edf3fb331b6c55439b10f9862987b0916b3726 + upstream: 9289cd3450d1da3e271ef4b054d4d2932c41243e +e2f974a4f127e38e7a5ec7a7ab51bb59d4392f17: + title: 'drm/nouveau/dispnv04: fix null pointer dereference in nv17_tv_get_hd_modes' + mainline: 6d411c8ccc0137a612e0044489030a194ff5c843 + upstream: ffabad4aa91e33ced3c6ae793fb37771b3e9cb51 +f8741253033be14a8f4297ba6c8ec7cd3ddf4def: + title: 'batman-adv: include gfp.h for GFP_* defines' +e6522330b7414dc7f96f547045bdc5db9de0cc3e: + title: 'batman-adv: Don''t accept TT entries for out-of-spec VIDs' + mainline: 537a350d14321c8cca5efbf0a33a404fec3a9f9e + upstream: 4d5a2d6b7a9a1140342c5229d1a427ec37a12fd4 +5696aad6bf4700041503e715bd2fb5d9dcf1fcc0: + title: 'ftruncate: pass a signed offset' + mainline: 4b8e88e563b5f666446d002ad0dc1e6e8e7102b0 + upstream: c329760749b5419769e57cb2be80955d2805f9c9 +7128fc9dcb40ffa3ca16cc92eeb4aa3f65639c87: + title: 'pwm: stm32: Refuse too small period requests' + mainline: c45fcf46ca2368dafe7e5c513a711a6f0f974308 + upstream: 19946741ea989605d12d2ffdbb006b9ca000dde8 +81d8db9302d30505f89d672e1a39c60ed71a1dda: + title: 'ipv6: annotate some data-races around sk->sk_prot' + mainline: 086d49058cd8471046ae9927524708820f5fd1c7 + upstream: 13bda7ac5801f501bed6e21717dbf3b0df773847 +0904f321c3a052af42b094f786f75fe32f5d8f2d: + title: 'ipv6: Fix data races around sk->sk_prot.' + mainline: 364f997b5cfe1db0d63a390fe7c801fa2b3115f6 + upstream: fda6d62642a9c544a293d7ad7cb058f8c7f8f3dd +1895f4d98247c54d045cd4a9c94c0802f3c270d5: + title: 'tcp: Fix data races around icsk->icsk_af_ops.' + mainline: f49cd2f4d6170d27a2c61f1fecb03d8a70c91f57 + upstream: 5bb642cc3355ffd3c8bca0a8bd8e6e65bcc2091c +6658230562d296ef2484a1156ff322c558d3c26a: + title: 'arm64: dts: rockchip: Add sound-dai-cells for RK3368' + mainline: 8d7ec44aa5d1eb94a30319074762a1740440cdc8 + upstream: f7fc312d1d750db0ea867e50e6c436e0679a5a65 +944720b778413cf71b70f8d697b94a357ea40e19: + title: 'SUNRPC: Fix RPC client cleaned up the freed pipefs dentries' + mainline: bfca5fb4e97c46503ddfc582335917b0cc228264 diff --git a/.elts/upstream/4.19.317.yaml b/.elts/upstream/4.19.317.yaml new file mode 100644 index 000000000000..f237f782b6f1 --- /dev/null +++ b/.elts/upstream/4.19.317.yaml @@ -0,0 +1,548 @@ +377dbb220edc8421b7960691876c5b3bef62f89b: + title: 'wifi: mac80211: mesh: Fix leak of mesh_preq_queue objects' + mainline: b7d7f11a291830fdf69d3301075dd0fb347ced84 + backport: a57e28b291e0ad50d1c6ceba6a7cb556fdf1faf6 +e51637e0c66a6f72d134d9f95daa47ea62b43c7e: + title: 'wifi: mac80211: Fix deadlock in ieee80211_sta_ps_deliver_wakeup()' + mainline: 44c06bbde6443de206b30f513100b5670b23fc5e + backport: 9feb2600c4ba32c9fb136d7b5e16ca06c853ea8c +a238de1c3413870b2f0d2e41a56b335ede1f5977: + title: 'wifi: iwlwifi: mvm: revert gen2 TX A-MPDU size to 64' + mainline: 4a7aace2899711592327463c1a29ffee44fcc66e + skipped: fixes patch not in branch +15b37c6fab9d5e40ac399fa1c725118588ed649c: + title: 'wifi: iwlwifi: mvm: don''t read past the mfuart notifcation' + mainline: 4bb95f4535489ed830cf9b34b0a891e384d1aee4 + backport: 79e590b3651e9074489976e737e7fc1255a6cd79 +6330fe95e59bc1de5ad3ebd89e379d785c7c6fc0: + title: 'ipv6: sr: block BH in seg6_output_core() and seg6_input_core()' + mainline: c0b98ac1cc104f48763cdb27b1e9ac25fd81fc90 + backport: 9ba19e227817b86f1032cc551912a049b62ba7e6 +ddd44dc20554c38450204df47f8422c7fec78f2d: + title: 'vxlan: Fix regression when dropping packets due to invalid src addresses' + mainline: 1cd4bc987abb2823836cbb8f887026011ccddc8a + backport: 7c79a301b097797b8edd46b11a888a287e281f98 +25dec34bfd770f444409b3228f90f64feb6804f6: + title: 'tcp: count CLOSE-WAIT sockets for TCP_MIB_CURRESTAB' + mainline: a46d0ea5c94205f40ecf912d1bb7806a8a64704f + backport: 54f3a87336ada67c8a8da26f7575d12c5ca85bfb +e468462fe0efdd233b6fd7b978e9911bb1eb8614: + title: 'ptp: Fix error message on failed pin verification' + mainline: 323a359f9b077f382f4483023d096a4d316fd135 + backport: 7a5ce9a4d73421a553e354ee6eb5de1a3bffeae5 +5c91a2f308cabf7cc0e30997455ac15926199987: + title: 'af_unix: Annotate data-race of sk->sk_state in unix_inq_len().' + mainline: 3a0f38eb285c8c2eead4b3230c7ac2983707599d + backport: 4379c4db8fa9f7d4adfdf7256277c96ac968a690 +6b4dffb64e98b9eacc7c214056146d32642f7e8a: + title: 'af_unix: Annotate data-races around sk->sk_state in unix_write_space() and poll().' + mainline: eb0718fb3e97ad0d6f4529b810103451c90adf94 + backport: 089da5e3914abb4806b03eff85aeb895c0ab860b +7cd9dd08be2482bd1015642b61d97a187af5a774: + title: 'af_unix: Annotate data-races around sk->sk_state in sendmsg() and recvmsg().' + mainline: 8a34d4e8d9742a24f74998f45a6a98edd923319b + backport: c6f96daa0536f49a7d624196dbc3defc536eacdb +123d798351c96a15456478558fccac0eb766f26d: + title: 'af_unix: Annotate data-races around sk->sk_state in UNIX_DIAG.' + mainline: 0aa3be7b3e1f8f997312cc4705f8165e02806f8f + backport: cab04acca50227f3f27fb5616bee123fea171762 +f5cf5e139ec736f1ac18cda8d5e5fc80d7eef787: + title: 'af_unix: Annotate data-race of net->unx.sysctl_max_dgram_qlen.' + mainline: bd9f2d05731f6a112d0c7391a0d537bfc588dbe6 + backport: 98e2f1cec1532524595d79af5c86ed370debd735 +b56ff0d20a4a60b9e6424d0609acccbbde573ea8: + title: 'af_unix: Use unix_recvq_full_lockless() in unix_stream_connect().' + mainline: 45d872f0e65593176d880ec148f41ad7c02e40a7 + backport: 15baad6e966a2478052b6e2efd0153a9e9a9e0c2 +141826272a2cd16436f9b6c241cf88b72feddb3b: + title: 'af_unix: Use skb_queue_len_lockless() in sk_diag_show_rqlen().' + mainline: 5d915e584d8408211d4567c22685aae8820bfc55 + backport: a8d1038ecf162678372a6f5686eabbf0c070ec91 +9c2d206ddc697595ceb0e8e356c64f9e845a0c2f: + title: 'af_unix: Annotate data-race of sk->sk_shutdown in sk_diag_fill().' + mainline: efaf24e30ec39ebbea9112227485805a48b0ceb1 + backport: 669958a2bdd8b94c6bbe1df7c83feae7b844afb3 +f71a53148ce34898fef099b75386a3a9f4449311: + title: 'usb: gadget: f_fs: Fix race between aio_cancel() and AIO request complete' + mainline: 24729b307eefcd7c476065cd7351c1a018082c19 + backport: 77067622d8f27240f3e5438767cce7317f8b9c34 +656068638e1da7728abde65760bc8e61106a9b34: + title: 'drm/amd/display: Handle Y carry-over in VCP X.Y calculation' + mainline: 3626a6aebe62ce7067cdc460c0c644e9445386bb + skipped: patched file is not in 4.14.y +9dcb6eb967fe778d1d985a709ac4030895603fc0: + title: 'serial: sc16is7xx: replace hardcoded divisor value with BIT() macro' + mainline: 2e57cefc4477659527f7adab1f87cdbf60ef1ae6 + backport: 6c20d50e094e8b67aab06f29f7e97351bbfef601 +2b14e818ef3e49741ee60a317554222c6af3a800: + title: 'serial: sc16is7xx: fix bug in sc16is7xx_set_baud() when using prescaler' + mainline: 8492bd91aa055907c67ef04f2b56f6dadd1f44bf + backport: f966c6e6aa0166c853782a705ae5389f8c6b24e7 +d3f6dc1155a09bc2c212b734c3ff01a046490e92: + title: 'media: mc: mark the media devnode as registered from the, start' + mainline: 4bc60736154bc9e0e39d3b88918f5d3762ebe5e0 + backport: 41d740fdbcb6d45f86ec6cd7238ba2ca38df8824 +62b71327cf1af11ceb4a3f53ebf0c85cb9ad3db8: + title: 'selftests/mm: compaction_test: fix incorrect write of zero to nr_hugepages' + mainline: 9ad665ef55eaad1ead1406a58a34f615a7c18b5e + backport: fe9a3e689a0275a21eae214693dd7ddbdbb63cec +4a4f88dcf8b688db0cf527362ebf4db0d272a3f6: + title: 'selftests/mm: conform test to TAP format output' + mainline: 9a21701edc41465de56f97914741bfb7bfc2517d + backport: 75614587972465759b313027993c87e60eeb446f +4d5f7ab71a24f17311d361f47c61cc49064e1dd0: + title: 'selftests/mm: compaction_test: fix bogus test success on Aarch64' + mainline: d4202e66a4b1fe6968f17f9f09bbc30d08f028a1 + backport: 6132af7d247da481d1f4e99c91f5fdc29961bce3 +c158e493640ce76e76241f0529cebe19770ba5b2: + title: 'nilfs2: Remove check for PageError' + mainline: 79ea65563ad8aaab309d61eeb4d5019dd6cf5fa0 + backport: 71bf6edd5d5c1384f56efcc445146a367f1e7c38 +7ed62ec616a3441aa3859150d50fadf5fd117aa8: + title: 'nilfs2: return the mapped address from nilfs_get_page()' + mainline: 09a46acb3697e50548bb265afa1d79163659dd85 + backport: 52c1c33e0dafbe82538c326d4a6144544e9501f4 +2ac8a2fe22bdde9eecce2a42cf5cab79333fb428: + title: 'nilfs2: fix nilfs_empty_dir() misjudgment and long loop on I/O errors' + mainline: 7373a51e7998b508af7136530f3a997b286ce81c + backport: c5682abd08cb2a8960de840d00ce1efc5066286e +217d1f44fff560b3995a685a60aa66e55a7f0f56: + title: 'USB: class: cdc-wdm: Fix CPU lockup caused by excessive log messages' + mainline: 22f00812862564b314784167a89f27b444f82a46 + backport: ac2c307a0180583e260719f923ba2edabddea919 +83c2321411d8bb8f832dbb482ea3387ac1322542: + title: 'mei: me: release irq in mei_me_pci_resume error path' + mainline: 283cb234ef95d94c61f59e1cd070cd9499b51292 + backport: 6f5dcde17cd2c15cb9812b4441ab1ba7088ccf0c +f0dedb5c511ed82cbaff4997a8decf2351ba549f: + title: 'jfs: xattr: fix buffer overflow for invalid xattr' + mainline: 7c55b78818cfb732680c4a72ab270cc2d2ee3d0f + backport: 79cb0bb1b0e2cbed9eaec6f1fb7ce81baf278a39 +a2ddc0475c4c6fff5b9eac0e0eb4726640925e1b: + title: 'xhci: Apply reset resume quirk to Etron EJ188 xHCI host' + mainline: 17bd54555c2aaecfdb38e2734149f684a73fa584 + backport: b8b14f255f86c39eee93bc4fbc4c8f6c3f9da875 +5c08d8bcc6f20965d665a6122a3fe60eba042e74: + title: 'xhci: Apply broken streams quirk to Etron EJ188 xHCI host' + mainline: 91f7a1524a92c70ffe264db8bdfa075f15bbbeb9 + backport: 41c568e13eb14e46c634292e403a4652603b2d46 +d9bbbbf1a2cac25fafa44ba09d2ab8f5365c0a06: + title: 'Input: try trimming too long modalias strings' + mainline: 0774d19038c496f0c3602fb505c43e1b2d8eed85 + backport: abe1fafad8d912b27028e91a0040650149ab4ab8 +beb99266830520e15fbc6ca8cc5a5240d76851fd: + title: 'xsk: validate user input for XDP_{UMEM|COMPLETION}_FILL_RING' + mainline: 237f3cf13b20db183d3706d997eedc3c49eacd44 + skipped: fixes patch not in branch +955b3764671f3f157215194972d9c01a3a4bd316: + title: 'HID: core: remove unnecessary WARN_ON() in implement()' + mainline: 4aa2dcfbad538adf7becd0034a3754e1bd01b2b5 + backport: c0be0c4967c8b988f9603c7b7cecc01379071c67 +7f66540fcf6f8f66784f739c33f79d2889e95106: + title: 'iommu/amd: Fix sysfs leak in iommu init' + mainline: a295ec52c8624883885396fde7b4df1a179627c3 + backport: 2cb6663051a21277c7bdf9695ad8a04fc6a5dc7a +87d6bdc006f0cbf297a3b2ad6e40ede4c3ee5dc2: + title: 'liquidio: Adjust a NULL pointer handling path in lio_vf_rep_copy_packet' + mainline: c44711b78608c98a3e6b49ce91678cd0917d5349 + skipped: fixes patch not in branch +3e0daaf28639c6fd22e96eb2f8772ad40e922ee7: + title: 'drm/bridge/panel: Fix runtime warning on panel bridge release' + mainline: ce62600c4dbee8d43b02277669dd91785a9b81d9 + backport: b4722a9d958fe8bd54d0358650bf07b11ab91d4b +06f208ae0670ef97b0bf253a5523863e113026b6: + title: 'tcp: fix race in tcp_v6_syn_recv_sock()' + mainline: d37fe4255abe8e7b419b90c5847e8ec2b8debb08 + backport: 291c8c1e9e291262f9179c0ba5cef2e49df4f142 +a1f9c8328219b9bb2c29846d6c74ea981e60b5a7: + title: 'Bluetooth: L2CAP: Fix rejecting L2CAP_CONN_PARAM_UPDATE_REQ' + mainline: 806a5198c05987b748b50f3d0c0cfb3d417381a4 + backport: 9ae3694d9677f29e0d8e5bbb86841f69baae279d +f00c343be6f25a6a3736fd6b332c918da57d81d8: + title: 'ipv6/route: Add a missing check on proc_dointvec' + mainline: f0fb9b288d0a7e9cc324ae362e2dfd2cc2217ded + backport: fab190e5fcd0466de646405bf49ca7017bbdca31 +ebde6e8a52c68dc45b4ae354e279ba74788579e7: + title: 'net/ipv6: Fix the RT cache flush via sysctl using a previous delay' + mainline: 14a20e5b4ad998793c5f43b0330d9e1388446cf3 + backport: 04f57a8a33fef04d61ba56f8b4e830fe0cebc8f2 +bb3641a5831789d83a58a39ed4a928bcbece7080: + title: 'drivers: core: synchronize really_probe() and dev_uevent()' + mainline: c0a40097f0bc81deafc15f9195d1fb54595cd6d0 + backport: 82d942edbd8b21acbacd1d16eb3cb52d47404384 +540ca99729e28dbe902b01039a3b4bd74520a819: + title: 'drm/exynos/vidi: fix memory leak in .get_modes()' + mainline: 38e3825631b1f314b21e3ade00b5a4d737eb054e + backport: 126c475927adda67084f403fee8ec76a853b70fc +58730dfbd4ae01c1b022b0d234a8bf8c02cdfb81: + title: 'vmci: prevent speculation leaks by sanitizing event in event_deliver()' + mainline: 8003f00d895310d409b2bf9ef907c56b42a4e0f4 + backport: 37026b40b51170c1f9b052ef1b1cd19ec815c566 +7bdf1d550ddfcd9ab797087421f77b7aceddc8a7: + title: 'fs/proc: fix softlockup in __read_vmcore' + mainline: 5cbcb62dddf5346077feb82b7b0c9254222d3445 + backport: aaea44b590e4a5e853dcc48edbf8ffa6dc611490 +f882e853ea33c1e4f7107387f85879139682b720: + title: 'ocfs2: use coarse time for new created files' + mainline: b8cb324277ee16f3eca3055b96fce4735a5a41c6 + backport: c02663a1e56ea3793580a51e2ea012e198661ca1 +3c26b5d21b1239e9c7fd31ba7d9b2d7bdbaa68d9: + title: 'ocfs2: fix races between hole punching and AIO+DIO' + mainline: 952b023f06a24b2ad6ba67304c4c84d45bea2f18 + backport: db16f074c58fb04ccb5efd329bd001b3769662b2 +1b6047e27f9b6c79518076a480cdccecf0b6afed: + title: 'PCI: rockchip-ep: Remove wrong mask on subsys_vendor_id' + mainline: 2dba285caba53f309d6060fca911b43d63f41697 + skipped: fixes patch not in branch +5226e7062723bd5d4f1bd5e98ace7c1e6c015d57: + title: 'dmaengine: axi-dmac: fix possible race in remove()' + mainline: 1bc31444209c8efae98cb78818131950d9a6f4d6 + backport: 7932419ef19393d4fc9b05a04583d8c31c2785e3 +96185ee73d5cd28c2b19311c87536ffeeb653562: + title: 'intel_th: pci: Add Granite Rapids support' + mainline: e44937889bdf4ecd1f0c25762b7226406b9b7a69 + backport: c2986a4fcfa961be763f68bb7c55ff808dcbbc63 +04d47e1fd4e9a9b9c32e769b9106bbcbddeca756: + title: 'intel_th: pci: Add Granite Rapids SOC support' + mainline: 854afe461b009801a171b3a49c5f75ea43e4c04c + backport: fbda6dc2f8c85e96d6ae1f5243146a33e627ee9e +f9159b4706fc1eae09c37081f9a580673a4477ff: + title: 'intel_th: pci: Add Sapphire Rapids SOC support' + mainline: 2e1da7efabe05cb0cf0b358883b2bc89080ed0eb + backport: 97c26585440f81fc3832759721964719ae7a4802 +8af7cedc0edf1b9d3c29e2b72e7d643f64669ee4: + title: 'intel_th: pci: Add Meteor Lake-S support' + mainline: c4a30def564d75e84718b059d1a62cc79b137cf9 + backport: 0d4c32589468be6d7b8993e7576690004f50f5cc +4780775da4957702ece226104b17d072e557a962: + title: 'intel_th: pci: Add Lunar Lake support' + mainline: f866b65322bfbc8fcca13c25f49e1a5c5a93ae4d + backport: eac9744fef5c714c3201a0ab9c56e61ede318c29 +95f6f81e50d858a7c9aa7c795ec14a0ac3819118: + title: 'nilfs2: fix potential kernel bug due to lack of writeback flag waiting' + mainline: a4ca369ca221bb7e06c725792ac107f0e48e82e7 + backport: 948b6135a242e4147ee69d7d47e1df20f5951d7f +1af0a35eba1ee302fc30aea8cb621f6de8728785: + title: 'hv_utils: drain the timesync packets on onchannelcallback' + mainline: b46b4a8a57c377b72a98c7930a9f6969d2d4784e + backport: 22749c2b34a685511b52c8e1c52539519f0a46ec +a33d99c8b213d16ad61bc68cb17aad1e2f484192: + title: 'hugetlb_encode.h: fix undefined behaviour (34 << 26)' + mainline: 710bb68c2e3a24512e2d2bae470960d7488e97b1 + backport: bee6efedbf7b70baa442b7af575c6cc055c2bcef +e0aab7b07a9375337847c9d74a5ec044071e01c8: + title: 'usb-storage: alauda: Check whether the media is initialized' + mainline: 16637fea001ab3c8df528a8995b3211906165a30 + backport: ba2eacb9af4998743a14271e11fba297a8761497 +6652029853316f4c273219145ef0e71b148bbe01: + title: 'rcutorture: Fix rcu_torture_one_read() pipe_count overflow comment' + mainline: 8b9b443fa860276822b25057cb3ff3b28734dec0 + backport: d3d05ae427ca75738046af172544e4ad75bdf8aa +79636f636126775436a11ee9cf00a9253a33ac11: + title: 'batman-adv: bypass empty buckets in batadv_purge_orig_ref()' + mainline: 40dc8ab605894acae1473e434944924a22cfaaa0 + backport: 5856f70943c52055ea24d8ee791308367cd1039a +56bec63a7fc87ad50b3373a87517dc9770eef9e0: + title: 'scsi: qedi: Fix crash while reading debugfs attribute' + mainline: 28027ec8e32ecbadcd67623edb290dad61e735b5 + backport: f98f3237faf35d508d9c1b783385102a7be0abf2 +acf2b80c31c37acab040baa3cf5f19fbd5140b18: + title: 'powerpc/pseries: Enforce hcall result buffer validity and size' + mainline: ff2e185cf73df480ec69675936c4ee75a445c3e4 + backport: 476276b356c5d338435b82ecfe217a9422d7235f +7e1e8e86b0b62844b2c795549f65494e95b5983e: + title: 'powerpc/io: Avoid clang null pointer arithmetic warnings' + mainline: 03c0f2c2b2220fc9cf8785cd7b61d3e71e24a366 + backport: 8824c4818bf4e7a3b2c47f78c6a8ace368ebe2c5 +02d13616ca30014ed96302e51a5b0e17664e58bc: + title: 'usb: misc: uss720: check for incompatible versions of the Belkin F5U002' + mainline: 3295f1b866bfbcabd625511968e8a5c541f9ab32 + backport: 43cef40ed1b05181bab0553b15a699a4a3de9dc4 +2f85b07bd802e86e155fd8496e3d105ec3a2ade9: + title: 'udf: udftime: prevent overflow in udf_disk_stamp_to_time()' + mainline: 3b84adf460381169c085e4bc09e7b57e9e16db0a + backport: 28e83fb606df2b620ca55001b6b1ec4669fff3fe +864a1e64802c2de46fe22b52ca87c5b409042803: + title: 'PCI/PM: Avoid D3cold for HP Pavilion 17 PC/1972 PCIe Ports' + mainline: 256df20c590bf0e4d63ac69330cf23faddac3e08 + skipped: commit did not cherry-pick cleanly +6bff05aaa32c2f7e1f6e68e890876642159db419: + title: 'MIPS: Octeon: Add PCIe link status check' + mainline: 29b83a64df3b42c88c0338696feb6fdcd7f1f3b7 + backport: 7bf7a1b84c85a21b7e9e7dc9136efd5c79d7b4ed +acabc32a7b27f30a75ef01e873d8b65f5dc7d5d5: + title: 'MIPS: Routerboard 532: Fix vendor retry check code' + mainline: ae9daffd9028f2500c9ac1517e46d4f2b57efb80 + backport: 2401229809147c9144c4e7bbbcc43c7154cf1aba +5d3b9efa04c0d8967e00cbc4b6b5aab79952f5d1: + title: 'cipso: fix total option length computation' + mainline: 9f36169912331fa035d7b73a91252d7c2512eb1a + backport: 2f46065f2784076d6c121eab1a21a8096fba6b13 +d616876256b38ecf9a1a1c7d674192c5346bc69c: + title: 'netrom: Fix a memory leak in nr_heartbeat_expiry()' + mainline: 0b9130247f3b6a1122478471ff0e014ea96bb735 + backport: f5105aa1e9989b1deb6d87f9d080a7d0d917dc56 +f0cda984e4e634b221dbf9642b8ecc5b4806b41e: + title: 'ipv6: prevent possible NULL dereference in rt6_probe()' + mainline: b86762dbe19a62e785c189f313cda5b989931f37 + skipped: prerequisite dcd1f572954f9d66d7b4a65df894ed5b4c467368 not in branch +c71761292d4d002a8eccb57b86792c4e3b3eb3c7: + title: 'xfrm6: check ip6_dst_idev() return value in xfrm6_get_saddr()' + mainline: d46401052c2d5614da8efea5788532f0401cb164 + backport: b71bbdc8869cbf604b55e27437b9d91d3dd909aa +d0e99ad7721155aaa4e57b8b11bb70743da61491: + title: 'virtio_net: checksum offloading handling fix' + mainline: 604141c036e1b636e2a71cf6e1aa09d1e45f40c2 + backport: e3d1b924da1c094e403381851f287d1cb6d430de +88154e3329e1f47490ee98f8d32a0353d8d46550: + title: 'net: usb: rtl8150 fix unintiatilzed variables in rtl8150_get_link_ksettings' + mainline: fba383985354e83474f95f36d7c65feb75dba19d + backport: 8bfba3c52500198a370f799501c232303b52817c +bdc0a40accdf77080fed82d72e89d341001dcbf6: + title: 'regulator: core: Fix modpost error "regulator_get_regmap" undefined' + mainline: 3f60497c658d2072714d097a177612d34b34aa3d + backport: cc48980d16d92c2f4e6c9a1976bd2afdf9f30fa6 +0b346aa39e76de78be5e105dc338e190e80a5188: + title: 'dmaengine: ioatdma: Fix missing kmem_cache_destroy()' + mainline: 5422145d0b749ad554ada772133b9b20f9fb0ec8 + backport: d7e271c7c6269187a0c054ef781b1160398b119a +435ecc978c3d5d0c4e172ec5b956dc1904061d98: + title: 'ACPICA: Revert "ACPICA: avoid Info: mapping multiple BARs. Your kernel is fine."' + mainline: a83e1385b780d41307433ddbc86e3c528db031f0 + backport: ed44c23c974a4df0899e57a375eeb563a911b575 +07e8f15fa16695cf4c90e89854e59af4a760055b: + title: 'drm/radeon: fix UBSAN warning in kv_dpm.c' + mainline: a498df5421fd737d11bfd152428ba6b1c8538321 + backport: cc96770672dafa9b46038f64523c42ce3534e8ba +48d5f4d66962fde59c78dd0a7cf6bd03b3f49c61: + title: 'gcov: add support for GCC 14' + mainline: c1558bc57b8e5b4da5d821537cd30e2e660861d8 + backport: cd513bd7a535592e2c65efc462a42866d507da3a +1d1838ca012952f4914af6f6619bbdea6251039c: + title: 'ARM: dts: samsung: smdkv310: fix keypad no-autorepeat' + mainline: 87d8e522d6f5a004f0aa06c0def302df65aff296 + backport: 5566df875aabd57002b81daf45d37d2f6c874d42 +77951f880a4b9e7f76460364ec0b931d1a59c9fb: + title: 'ARM: dts: samsung: exynos4412-origen: fix keypad no-autorepeat' + mainline: 88208d3cd79821117fd3fb80d9bcab618467d37b + backport: 9b2697403d29b12ef06ab68f4f2232291dfed184 +4c70a7576ae14f804196ae0089f9deb6cbd77e1f: + title: 'ARM: dts: samsung: smdk4412: fix keypad no-autorepeat' + mainline: 4ac4c1d794e7ff454d191bbdab7585ed8dbf3758 + backport: d350b585ee4796a3868be5f4cd8a29877275c819 +6721b33aa934e8afd255db9a466868f74f5c5cb5: + title: 'selftests/ftrace: Fix checkbashisms errors' + mainline: 72ce3daf92ba4f5bae6e91095d40e67b367c6b2f + skipped: patched file is not in 4.14.y +876d7d009c528caea5af95a70ab998374cbc7c7f: + title: 'tracing: Add MODULE_DESCRIPTION() to preemptirq_delay_test' + mainline: 23748e3e0fbfe471eff5ce439921629f6a427828 + skipped: fixes patch not in branch +c23ead9986a17c793d39be11ce6c084904c9c44a: + title: 'perf/core: Fix missing wakeup when waiting for context reference' + mainline: 74751ef5c1912ebd3e65c3b65f45587e05ce5d36 + skipped: fixes patch not in branch +4c003aef56d5642aefd4d11ee9d7e6755d4c1a6e: + title: 'PCI: Add PCI_ERROR_RESPONSE and related definitions' + mainline: 57bdeef4716689d9b0e3571034d65cf420f6efcd + backport: dcea2cf5d7cca146641b67b8cbcc153cbfdeb0c3 +d4e52b36c73f44d2b5f41d0cd3f57b3d2efbf180: + title: 'x86/amd_nb: Check for invalid SMN reads' + mainline: c625dabbf1c4a8e77e4734014f2fde7aa9071a1f + backport: f66ed725b522bfad043ec2dbcf50eff7ffc8feda +b576d7d08f26d40789313ec6a8acc966a149c37f: + title: 'iio: dac: ad5592r-base: Replace indio_dev->mlock with own device lock' + mainline: 33c53cbf8f7bc8d62f6146a19da97c8594376ff0 + backport: e8b7b4167c95a9e6976479edda683c1b13ca0832 +c101996c9dabd9d809c12f686547b7035c087f10: + title: 'iio: dac: ad5592r: un-indent code-block for scale read' + mainline: b004fe33034cc64f72c20923be71cf1e6c9a624c + backport: a28ae8f66b95e48a7ad69aa23382bd8486b6c529 +9eaaefbae8f5ddbed0fce822042ad969f5f876c5: + title: 'iio: dac: ad5592r: fix temperature channel scaling value' + mainline: 279428df888319bf68f2686934897301a250bb84 + backport: d9b6601da0310953862e47ebc5fe28f9bf37033a +229e75730c784f7b871ae9bd76f8bd506d20a304: + title: 'scsi: mpt3sas: Add ioc_ logging macros' + mainline: 645a20c6821cd1ab58af8a1f99659e619c216efd + backport: 675de54c63726a5b6316a7c3854219e10208f4ea +230c290c74b956a4c26926c94a5bf932ca234884: + title: 'scsi: mpt3sas: Gracefully handle online firmware update' + mainline: ffedeae1fa545a1d07e6827180c3923bf67af59f + backport: bd4e577402b93532aacc19b7f44c4963b763fafe +e9bce7c751f6d6c7be88c0bc081a66aaf61a23ee: + title: 'scsi: mpt3sas: Avoid test/set_bit() operating in non-allocated memory' + mainline: 4254dfeda82f20844299dca6c38cbffcfd499f41 + backport: 165419d81604a14fb6d0b111fd2f96288ec9528b +8f667ee530a601449fede56370036e1d8d9a62dc: + title: 'xhci: Use soft retry to recover faster from transaction errors' + mainline: f8f80be501aa2f10669585c3e328fad079d8cb3a + backport: de371a2bb30d1695a5c07357bd207e5aadefcd51 +ca0f0c5b0b991a71f61948bad09eb5f9e8cc4851: + title: 'xhci: Set correct transferred length for cancelled bulk transfers' + mainline: f0260589b439e2637ad54a2b25f00a516ef28a57 + backport: c73496b00b416467313ec64166d9d8d5d7e3a921 +2a28c0f457c5563cef9fbad803d9445eee0c1e05: + title: 'usb: xhci: do not perform Soft Retry for some xHCI hosts' + mainline: a4a251f8c23518899d2078c320cf9ce2fa459c9f + backport: 3f74f1a0bd8b876661fb5263fa78048e2586065d +e65a0dc2e85efb28e182aca50218e8a056d0ce04: + title: 'pinctrl: fix deadlock in create_pinctrl() when handling -EPROBE_DEFER' + mainline: adec57ff8e66aee632f3dd1f93787c13d112b7a1 + backport: d6636e9d955f53a9da4e40af4ddba67ab3391fbf +860a562a61a838867c8d3f66d059a0fc7a67d1c9: + title: 'pinctrl: rockchip: fix pinmux bits for RK3328 GPIO2-B pins' + mainline: e8448a6c817c2aa6c6af785b1d45678bd5977e8d + backport: 0b45b7f4f6ee46da3efc4858af96e1a86e536250 +f8426b53f59f88c637143ffa31276be73a3c9b27: + title: 'pinctrl: rockchip: fix pinmux bits for RK3328 GPIO3-B pins' + mainline: 5ef6914e0bf578357b4c906ffe6b26e7eedb8ccf + backport: 0d6d13a0bb379aa59f6475c1bb6df7aaed21857f +61c552e4ee1dbfa85d68997ab6e9d80690b401a7: + title: 'pinctrl: rockchip: fix pinmux reset in rockchip_pmx_set' + mainline: 4ea4d4808e342ddf89ba24b93ffa2057005aaced + backport: a1e6c61656a89e49007fd9847fe123acd15d31b9 +4ad7d49059358ceadd352b4e2511425bdb68f400: + title: 'drm/amdgpu: fix UBSAN warning in kv_dpm.c' + mainline: f0d576f840153392d04b2d52cf3adab8f62e8cb6 + backport: 90340ac06eb8a83a320c3bf2a31cc67eaf333478 +f696eaf675650cd57411020bb8b83f57e2de3f11: + title: 'netfilter: nf_tables: validate family when identifying table via handle' + mainline: f6e1532a2697b81da00bfb184e99d15e01e9d98c + skipped: fixes patch not in branch +ae81535ce2503aabc4adab3472f4338070cdeb6a: + title: 'ASoC: fsl-asoc-card: set priv->pdev before using it' + mainline: 90f3feb24172185f1832636264943e8b5e289245 + backport: f6658c76f5f0670445bebb35a9ccf3d5ae502806 +40188a25a9847dbeb7ec67517174a835a677752f: + title: 'netfilter: nf_tables: fully validate NFT_DATA_VALUE on store to data registers' + mainline: 7931d32955e09d0a11b1fe0b6aac1bfa061c005c + backport: c01fc5238f6bb561e137d7b6e7df88c5107a263f +b71348be1236398be2d04c5e145fd6eaae86a91b: + title: 'drm/panel: ilitek-ili9881c: Fix warning with GPIO controllers that sleep' + mainline: ee7860cd8b5763017f8dc785c2851fecb7a0c565 + skipped: patched file is not in 4.14.y +2b085521be5292016097b5e7ca81b26be3f7098d: + title: 'net/iucv: Avoid explicit cpumask var allocation on stack' + mainline: be4e1304419c99a164b4c0e101c7c2a756b635b9 + backport: 9578df8a6b21442b2451be92ea5ce59b2cc38505 +40d7def67841343c10f8642a41031fecbb248bab: + title: 'ALSA: emux: improve patch ioctl data validation' + mainline: 89b32ccb12ae67e630c6453d778ec30a592a212f + backport: bf4ffd90f46475894c7d758eb26aa0f8a31dc245 +1925c902159d686372d897c2fa8ee4ea91b62d14: + title: 'media: dvbdev: Initialize sbuf' + mainline: 17d1316de0d7dc1bdc5d6e3ad4efd30a9bf1a381 + backport: 728e947a35ba429d96e495c170367211583d760e +671abe2b126e6e39d52eefbf53106650ef2dd904: + title: 'soc: ti: wkup_m3_ipc: Send NULL dummy message instead of pointer message' + mainline: ddbf3204f600a4d1f153498f618369fca352ae00 + backport: cf89c5861a3b88fcef8ce222edd384bb5cb44934 +277ea9f9bf1171f0f02836ded9b65b9b8684322d: + title: 'nvme: fixup comment for nvme RDMA Provider Type' + mainline: f80a55fa90fa76d01e3fffaa5d0413e522ab9a00 + backport: 43bae0d9a7bd2f0a78a283b1440a74601b4a4f68 +a8d78984fdc105bc1a38b73e98d32b1bc4222684: + title: 'gpio: davinci: Validate the obtained number of IRQs' + mainline: 7aa9b96e9a73e4ec1771492d0527bd5fc5ef9164 + skipped: fixes patch not in branch +c7999d372e7fe8bdfbc2226af1896e8bd328018a: + title: 'i2c: ocores: stop transfer on timeout' + mainline: e7663ef5ae0f02e3b902eb0305dec981333eb3e1 + backport: b4951f8134444e1eb7b28ea2234463f8ed077745 +1f7e4dd58af1267db2970e5c2e98a4d0ff170047: + title: 'i2c: ocores: set IACK bit after core is enabled' + mainline: 5a72477273066b5b357801ab2d315ef14949d402 + backport: 4d73d79702f3c0872f20dfd8a05974c7b18ebc7f +65ebdde16e7f5da99dbf8a548fb635837d78384e: + title: 'x86: stop playing stack games in profile_pc()' + mainline: 093d9603b60093a9aaae942db56107f6432a5dca + backport: 00eda93e9c842eecb76a1bc09b337e4f0cb043eb +bba83bf85fc6fcca1e827fd88bf3998be9ad0d24: + title: 'mmc: sdhci-pci: Convert PCIBIOS_* return codes to errnos' + mainline: ebc4fc34eae8ddfbef49f2bdaced1bf4167ef80d + backport: 51e44a77a5ca50e7e1f0548960bbb9eea83ff139 +75a024d3ab0d331fc1d0b640b00e63d31d556b1e: + title: 'iio: adc: ad7266: Fix variable checking bug' + mainline: a2b86132955268b2a1703082fbc2d4832fc001b8 + backport: b23dedd4318672a4265f48d90f8760b41b6f7006 +272736d778a42a3cdb623d53665a0e6a85125b66: + title: 'iio: chemical: bme680: Fix pressure value output' + mainline: ae1f7b93b52095be6776d0f34957b4f35dda44d9 + skipped: fixes patch not in branch +d17f26afde5039c30297e9c6ffc273689e595154: + title: 'iio: chemical: bme680: Fix calibration data variable' + mainline: b47c0fee73a810c4503c4a94ea34858a1d865bba + skipped: fixes patch not in branch +6fa31bbe2ea8665ee970258eb8320cbf231dbe9e: + title: 'iio: chemical: bme680: Fix overflows in compensate() functions' + mainline: fdd478c3ae98c3f13628e110dce9b6cfb0d9b3c8 + skipped: fixes patch not in branch +2e2ee64a367e97d433d1f9f735efb69f2612472b: + title: 'iio: chemical: bme680: Fix sensor data read operation' + mainline: 4241665e6ea063a9c1d734de790121a71db763fc + skipped: fixes patch not in branch +abb029e078e149d4d1f44a244cf833a6a1541447: + title: 'net: usb: ax88179_178a: improve link status logs' + mainline: 058722ee350c0bdd664e467156feb2bf5d9cc271 + backport: e4de596e5e18fb924bfe0048049cd04a285272f9 +a0886d04f1c7439b55c1c9daecd6b21ada2de5dd: + title: 'usb: gadget: printer: SS+ support' + mainline: fd80731e5e9d1402cb2f85022a6abf9b1982ec5f + backport: cbc92ffc360a7b6f16408d7092c71d72bb9e0382 +a93b97349ba92cdc8b63ad09d28a873a467e1d62: + title: 'usb: musb: da8xx: fix a resource leak in probe()' + mainline: de644a4a86be04ed8a43ef8267d0f7d021941c5e + backport: 7209de070ba2427bfa29373c649c6311b69580bc +5159a81924311c1ec786ad9fdef784ead8676a6a: + title: 'usb: atm: cxacru: fix endpoint checking in cxacru_bind()' + mainline: 2eabb655a968b862bc0c31629a09f0fbf3c80d51 + backport: 4ddbe32a34bc9cc18c34282f88488d22c4178071 +0929fbe8194db19bfeed22f8c7f9b24da9f08bb9: + title: 'tty: mcf: MCF54418 has 10 UARTS' + mainline: 7c92a8bd53f24d50c8cf4aba53bb75505b382fed + backport: c6f828c51833c0dcdd53b79a4eb5c8d5f5ebd56b +72152ab85ae44e13df8b7a653b5f657b48fa3229: + title: 'hexagon: fix fadvise64_64 calling conventions' + mainline: 896842284c6ccba25ec9d78b7b6e62cdd507c083 + backport: 87cc48eed0c10fc8f13907410db3f1c76c77826b +9289cd3450d1da3e271ef4b054d4d2932c41243e: + title: 'drm/nouveau/dispnv04: fix null pointer dereference in nv17_tv_get_ld_modes' + mainline: 66edf3fb331b6c55439b10f9862987b0916b3726 + backport: 2dc9769a951e305b690994008bcc32ee0d57f3e2 +ffabad4aa91e33ced3c6ae793fb37771b3e9cb51: + title: 'drm/nouveau/dispnv04: fix null pointer dereference in nv17_tv_get_hd_modes' + mainline: 6d411c8ccc0137a612e0044489030a194ff5c843 + backport: e2f974a4f127e38e7a5ec7a7ab51bb59d4392f17 +4d5a2d6b7a9a1140342c5229d1a427ec37a12fd4: + title: 'batman-adv: Don''t accept TT entries for out-of-spec VIDs' + mainline: 537a350d14321c8cca5efbf0a33a404fec3a9f9e + backport: e6522330b7414dc7f96f547045bdc5db9de0cc3e +290073b2b557e4dc21ee74a1e403d9ae79e393a2: + title: 'ata: libata-core: Fix double free on error' + mainline: ab9e0c529eb7cafebdd31fe1644524e80a48b05d + skipped: fixes patch not in branch +c329760749b5419769e57cb2be80955d2805f9c9: + title: 'ftruncate: pass a signed offset' + mainline: 4b8e88e563b5f666446d002ad0dc1e6e8e7102b0 + backport: 5696aad6bf4700041503e715bd2fb5d9dcf1fcc0 +19946741ea989605d12d2ffdbb006b9ca000dde8: + title: 'pwm: stm32: Refuse too small period requests' + mainline: c45fcf46ca2368dafe7e5c513a711a6f0f974308 + backport: 7128fc9dcb40ffa3ca16cc92eeb4aa3f65639c87 +13bda7ac5801f501bed6e21717dbf3b0df773847: + title: 'ipv6: annotate some data-races around sk->sk_prot' + mainline: 086d49058cd8471046ae9927524708820f5fd1c7 + backport: 81d8db9302d30505f89d672e1a39c60ed71a1dda +fda6d62642a9c544a293d7ad7cb058f8c7f8f3dd: + title: 'ipv6: Fix data races around sk->sk_prot.' + mainline: 364f997b5cfe1db0d63a390fe7c801fa2b3115f6 + backport: 0904f321c3a052af42b094f786f75fe32f5d8f2d +5bb642cc3355ffd3c8bca0a8bd8e6e65bcc2091c: + title: 'tcp: Fix data races around icsk->icsk_af_ops.' + mainline: f49cd2f4d6170d27a2c61f1fecb03d8a70c91f57 + backport: 1895f4d98247c54d045cd4a9c94c0802f3c270d5 +f7fc312d1d750db0ea867e50e6c436e0679a5a65: + title: 'arm64: dts: rockchip: Add sound-dai-cells for RK3368' + mainline: 8d7ec44aa5d1eb94a30319074762a1740440cdc8 + backport: 6658230562d296ef2484a1156ff322c558d3c26a diff --git a/Makefile b/Makefile index bf1509273244..4f4f84853374 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 14 -SUBLEVEL = 349 +SUBLEVEL = 350 EXTRAVERSION = -openela NAME = Petit Gorille diff --git a/arch/arm/boot/dts/exynos4210-smdkv310.dts b/arch/arm/boot/dts/exynos4210-smdkv310.dts index 9c98a3724396..80f8cf76dd2b 100644 --- a/arch/arm/boot/dts/exynos4210-smdkv310.dts +++ b/arch/arm/boot/dts/exynos4210-smdkv310.dts @@ -67,7 +67,7 @@ &keypad { samsung,keypad-num-rows = <2>; samsung,keypad-num-columns = <8>; - linux,keypad-no-autorepeat; + linux,input-no-autorepeat; wakeup-source; pinctrl-names = "default"; pinctrl-0 = <&keypad_rows &keypad_cols>; diff --git a/arch/arm/boot/dts/exynos4412-origen.dts b/arch/arm/boot/dts/exynos4412-origen.dts index 0224e1da66c5..72c5a946f7b0 100644 --- a/arch/arm/boot/dts/exynos4412-origen.dts +++ b/arch/arm/boot/dts/exynos4412-origen.dts @@ -440,7 +440,7 @@ &keypad { samsung,keypad-num-rows = <3>; samsung,keypad-num-columns = <2>; - linux,keypad-no-autorepeat; + linux,input-no-autorepeat; wakeup-source; pinctrl-0 = <&keypad_rows &keypad_cols>; pinctrl-names = "default"; diff --git a/arch/arm/boot/dts/exynos4412-smdk4412.dts b/arch/arm/boot/dts/exynos4412-smdk4412.dts index 7fcb43431b59..e1d34df4d82f 100644 --- a/arch/arm/boot/dts/exynos4412-smdk4412.dts +++ b/arch/arm/boot/dts/exynos4412-smdk4412.dts @@ -46,7 +46,7 @@ &keypad { samsung,keypad-num-rows = <3>; samsung,keypad-num-columns = <8>; - linux,keypad-no-autorepeat; + linux,input-no-autorepeat; wakeup-source; pinctrl-0 = <&keypad_rows &keypad_cols>; pinctrl-names = "default"; diff --git a/arch/arm64/boot/dts/rockchip/rk3368.dtsi b/arch/arm64/boot/dts/rockchip/rk3368.dtsi index 2313aea0e69e..469d5b99ce00 100644 --- a/arch/arm64/boot/dts/rockchip/rk3368.dtsi +++ b/arch/arm64/boot/dts/rockchip/rk3368.dtsi @@ -710,6 +710,7 @@ dma-names = "tx"; pinctrl-names = "default"; pinctrl-0 = <&spdif_tx>; + #sound-dai-cells = <0>; status = "disabled"; }; @@ -721,6 +722,7 @@ clocks = <&cru SCLK_I2S_2CH>, <&cru HCLK_I2S_2CH>; dmas = <&dmac_bus 6>, <&dmac_bus 7>; dma-names = "tx", "rx"; + #sound-dai-cells = <0>; status = "disabled"; }; @@ -734,6 +736,7 @@ dma-names = "tx", "rx"; pinctrl-names = "default"; pinctrl-0 = <&i2s_8ch_bus>; + #sound-dai-cells = <0>; status = "disabled"; }; diff --git a/arch/hexagon/include/asm/syscalls.h b/arch/hexagon/include/asm/syscalls.h new file mode 100644 index 000000000000..40f2d08bec92 --- /dev/null +++ b/arch/hexagon/include/asm/syscalls.h @@ -0,0 +1,6 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#include + +asmlinkage long sys_hexagon_fadvise64_64(int fd, int advice, + u32 a2, u32 a3, u32 a4, u32 a5); diff --git a/arch/hexagon/kernel/syscalltab.c b/arch/hexagon/kernel/syscalltab.c index 7024b1ddc08a..ad27d1ae49a5 100644 --- a/arch/hexagon/kernel/syscalltab.c +++ b/arch/hexagon/kernel/syscalltab.c @@ -27,6 +27,13 @@ #undef __SYSCALL #define __SYSCALL(nr, call) [nr] = (call), +SYSCALL_DEFINE6(hexagon_fadvise64_64, int, fd, int, advice, + SC_ARG64(offset), SC_ARG64(len)) +{ + return ksys_fadvise64_64(fd, SC_VAL64(loff_t, offset), SC_VAL64(loff_t, len), advice); +} +#define sys_fadvise64_64 sys_hexagon_fadvise64_64 + void *sys_call_table[__NR_syscalls] = { #include }; diff --git a/arch/mips/pci/ops-rc32434.c b/arch/mips/pci/ops-rc32434.c index 874ed6df9768..34b9323bdabb 100644 --- a/arch/mips/pci/ops-rc32434.c +++ b/arch/mips/pci/ops-rc32434.c @@ -112,8 +112,8 @@ retry: * gives them time to settle */ if (where == PCI_VENDOR_ID) { - if (ret == 0xffffffff || ret == 0x00000000 || - ret == 0x0000ffff || ret == 0xffff0000) { + if (*val == 0xffffffff || *val == 0x00000000 || + *val == 0x0000ffff || *val == 0xffff0000) { if (delay > 4) return 0; delay *= 2; diff --git a/arch/mips/pci/pcie-octeon.c b/arch/mips/pci/pcie-octeon.c old mode 100644 new mode 100755 index fd2887415bc8..051ab9a1141f --- a/arch/mips/pci/pcie-octeon.c +++ b/arch/mips/pci/pcie-octeon.c @@ -232,12 +232,18 @@ static inline uint64_t __cvmx_pcie_build_config_addr(int pcie_port, int bus, { union cvmx_pcie_address pcie_addr; union cvmx_pciercx_cfg006 pciercx_cfg006; + union cvmx_pciercx_cfg032 pciercx_cfg032; pciercx_cfg006.u32 = cvmx_pcie_cfgx_read(pcie_port, CVMX_PCIERCX_CFG006(pcie_port)); if ((bus <= pciercx_cfg006.s.pbnum) && (dev != 0)) return 0; + pciercx_cfg032.u32 = + cvmx_pcie_cfgx_read(pcie_port, CVMX_PCIERCX_CFG032(pcie_port)); + if ((pciercx_cfg032.s.dlla == 0) || (pciercx_cfg032.s.lt == 1)) + return 0; + pcie_addr.u64 = 0; pcie_addr.config.upper = 2; pcie_addr.config.io = 1; diff --git a/arch/powerpc/include/asm/hvcall.h b/arch/powerpc/include/asm/hvcall.h index 63907b4ae28b..5f010bb8c26c 100644 --- a/arch/powerpc/include/asm/hvcall.h +++ b/arch/powerpc/include/asm/hvcall.h @@ -381,7 +381,7 @@ long plpar_hcall_norets(unsigned long opcode, ...); * Used for all but the craziest of phyp interfaces (see plpar_hcall9) */ #define PLPAR_HCALL_BUFSIZE 4 -long plpar_hcall(unsigned long opcode, unsigned long *retbuf, ...); +long plpar_hcall(unsigned long opcode, unsigned long retbuf[static PLPAR_HCALL_BUFSIZE], ...); /** * plpar_hcall_raw: - Make a hypervisor call without calculating hcall stats @@ -395,7 +395,7 @@ long plpar_hcall(unsigned long opcode, unsigned long *retbuf, ...); * plpar_hcall, but plpar_hcall_raw works in real mode and does not * calculate hypervisor call statistics. */ -long plpar_hcall_raw(unsigned long opcode, unsigned long *retbuf, ...); +long plpar_hcall_raw(unsigned long opcode, unsigned long retbuf[static PLPAR_HCALL_BUFSIZE], ...); /** * plpar_hcall9: - Make a pseries hypervisor call with up to 9 return arguments @@ -406,8 +406,8 @@ long plpar_hcall_raw(unsigned long opcode, unsigned long *retbuf, ...); * PLPAR_HCALL9_BUFSIZE to size the return argument buffer. */ #define PLPAR_HCALL9_BUFSIZE 9 -long plpar_hcall9(unsigned long opcode, unsigned long *retbuf, ...); -long plpar_hcall9_raw(unsigned long opcode, unsigned long *retbuf, ...); +long plpar_hcall9(unsigned long opcode, unsigned long retbuf[static PLPAR_HCALL9_BUFSIZE], ...); +long plpar_hcall9_raw(unsigned long opcode, unsigned long retbuf[static PLPAR_HCALL9_BUFSIZE], ...); struct hvcall_mpp_data { unsigned long entitled_mem; diff --git a/arch/powerpc/include/asm/io.h b/arch/powerpc/include/asm/io.h index e6d33eed8202..e057e0236843 100644 --- a/arch/powerpc/include/asm/io.h +++ b/arch/powerpc/include/asm/io.h @@ -537,12 +537,12 @@ __do_out_asm(_rec_outl, "stwbrx") #define __do_inw(port) _rec_inw(port) #define __do_inl(port) _rec_inl(port) #else /* CONFIG_PPC32 */ -#define __do_outb(val, port) writeb(val,(PCI_IO_ADDR)_IO_BASE+port); -#define __do_outw(val, port) writew(val,(PCI_IO_ADDR)_IO_BASE+port); -#define __do_outl(val, port) writel(val,(PCI_IO_ADDR)_IO_BASE+port); -#define __do_inb(port) readb((PCI_IO_ADDR)_IO_BASE + port); -#define __do_inw(port) readw((PCI_IO_ADDR)_IO_BASE + port); -#define __do_inl(port) readl((PCI_IO_ADDR)_IO_BASE + port); +#define __do_outb(val, port) writeb(val,(PCI_IO_ADDR)(_IO_BASE+port)); +#define __do_outw(val, port) writew(val,(PCI_IO_ADDR)(_IO_BASE+port)); +#define __do_outl(val, port) writel(val,(PCI_IO_ADDR)(_IO_BASE+port)); +#define __do_inb(port) readb((PCI_IO_ADDR)(_IO_BASE + port)); +#define __do_inw(port) readw((PCI_IO_ADDR)(_IO_BASE + port)); +#define __do_inl(port) readl((PCI_IO_ADDR)(_IO_BASE + port)); #endif /* !CONFIG_PPC32 */ #ifdef CONFIG_EEH @@ -558,12 +558,12 @@ __do_out_asm(_rec_outl, "stwbrx") #define __do_writesw(a, b, n) _outsw(PCI_FIX_ADDR(a),(b),(n)) #define __do_writesl(a, b, n) _outsl(PCI_FIX_ADDR(a),(b),(n)) -#define __do_insb(p, b, n) readsb((PCI_IO_ADDR)_IO_BASE+(p), (b), (n)) -#define __do_insw(p, b, n) readsw((PCI_IO_ADDR)_IO_BASE+(p), (b), (n)) -#define __do_insl(p, b, n) readsl((PCI_IO_ADDR)_IO_BASE+(p), (b), (n)) -#define __do_outsb(p, b, n) writesb((PCI_IO_ADDR)_IO_BASE+(p),(b),(n)) -#define __do_outsw(p, b, n) writesw((PCI_IO_ADDR)_IO_BASE+(p),(b),(n)) -#define __do_outsl(p, b, n) writesl((PCI_IO_ADDR)_IO_BASE+(p),(b),(n)) +#define __do_insb(p, b, n) readsb((PCI_IO_ADDR)(_IO_BASE+(p)), (b), (n)) +#define __do_insw(p, b, n) readsw((PCI_IO_ADDR)(_IO_BASE+(p)), (b), (n)) +#define __do_insl(p, b, n) readsl((PCI_IO_ADDR)(_IO_BASE+(p)), (b), (n)) +#define __do_outsb(p, b, n) writesb((PCI_IO_ADDR)(_IO_BASE+(p)),(b),(n)) +#define __do_outsw(p, b, n) writesw((PCI_IO_ADDR)(_IO_BASE+(p)),(b),(n)) +#define __do_outsl(p, b, n) writesl((PCI_IO_ADDR)(_IO_BASE+(p)),(b),(n)) #define __do_memset_io(addr, c, n) \ _memset_io(PCI_FIX_ADDR(addr), c, n) diff --git a/arch/x86/kernel/amd_nb.c b/arch/x86/kernel/amd_nb.c index c88e0b127810..975e88955f87 100644 --- a/arch/x86/kernel/amd_nb.c +++ b/arch/x86/kernel/amd_nb.c @@ -128,7 +128,14 @@ out: int amd_smn_read(u16 node, u32 address, u32 *value) { - return __amd_smn_rw(node, address, value, false); + int err = __amd_smn_rw(node, address, value, false); + + if (PCI_POSSIBLE_ERROR(*value)) { + err = -ENODEV; + *value = 0; + } + + return err; } EXPORT_SYMBOL_GPL(amd_smn_read); diff --git a/arch/x86/kernel/time.c b/arch/x86/kernel/time.c index 12f90f17f4f6..2cabfeece1a8 100644 --- a/arch/x86/kernel/time.c +++ b/arch/x86/kernel/time.c @@ -26,26 +26,7 @@ unsigned long profile_pc(struct pt_regs *regs) { - unsigned long pc = instruction_pointer(regs); - - if (!user_mode(regs) && in_lock_functions(pc)) { -#ifdef CONFIG_FRAME_POINTER - return *(unsigned long *)(regs->bp + sizeof(long)); -#else - unsigned long *sp = - (unsigned long *)kernel_stack_pointer(regs); - /* - * Return address is either directly at stack pointer - * or above a saved flags. Eflags has bits 22-31 zero, - * kernel addresses don't. - */ - if (sp[0] >> 22) - return sp[0]; - if (sp[1] >> 22) - return sp[1]; -#endif - } - return pc; + return instruction_pointer(regs); } EXPORT_SYMBOL(profile_pc); diff --git a/drivers/acpi/acpica/exregion.c b/drivers/acpi/acpica/exregion.c index 7bcc9d809b7e..852a35b80a68 100644 --- a/drivers/acpi/acpica/exregion.c +++ b/drivers/acpi/acpica/exregion.c @@ -77,7 +77,6 @@ acpi_ex_system_memory_space_handler(u32 function, struct acpi_mem_space_context *mem_info = region_context; u32 length; acpi_size map_length; - acpi_size page_boundary_map_length; #ifdef ACPI_MISALIGNMENT_NOT_SUPPORTED u32 remainder; #endif @@ -154,26 +153,8 @@ acpi_ex_system_memory_space_handler(u32 function, map_length = (acpi_size) ((mem_info->address + mem_info->length) - address); - /* - * If mapping the entire remaining portion of the region will cross - * a page boundary, just map up to the page boundary, do not cross. - * On some systems, crossing a page boundary while mapping regions - * can cause warnings if the pages have different attributes - * due to resource management. - * - * This has the added benefit of constraining a single mapping to - * one page, which is similar to the original code that used a 4k - * maximum window. - */ - page_boundary_map_length = (acpi_size) - (ACPI_ROUND_UP(address, ACPI_DEFAULT_PAGE_SIZE) - address); - if (page_boundary_map_length == 0) { - page_boundary_map_length = ACPI_DEFAULT_PAGE_SIZE; - } - - if (map_length > page_boundary_map_length) { - map_length = page_boundary_map_length; - } + if (map_length > ACPI_DEFAULT_PAGE_SIZE) + map_length = ACPI_DEFAULT_PAGE_SIZE; /* Create a new mapping starting at the address given */ diff --git a/drivers/base/core.c b/drivers/base/core.c index b38397cb8e95..23b8d6404730 100644 --- a/drivers/base/core.c +++ b/drivers/base/core.c @@ -1004,8 +1004,11 @@ static ssize_t uevent_show(struct device *dev, struct device_attribute *attr, if (!env) return -ENOMEM; + /* Synchronize with really_probe() */ + device_lock(dev); /* let the kset specific function add its keys */ retval = kset->uevent_ops->uevent(kset, &dev->kobj, env); + device_unlock(dev); if (retval) goto out; diff --git a/drivers/dma/dma-axi-dmac.c b/drivers/dma/dma-axi-dmac.c index 9887f2a14aa9..0cc03cd3ef8f 100644 --- a/drivers/dma/dma-axi-dmac.c +++ b/drivers/dma/dma-axi-dmac.c @@ -675,8 +675,8 @@ static int axi_dmac_remove(struct platform_device *pdev) { struct axi_dmac *dmac = platform_get_drvdata(pdev); - of_dma_controller_free(pdev->dev.of_node); free_irq(dmac->irq, dmac); + of_dma_controller_free(pdev->dev.of_node); tasklet_kill(&dmac->chan.vchan.task); dma_async_device_unregister(&dmac->dma_dev); clk_disable_unprepare(dmac->clk); diff --git a/drivers/dma/ioat/init.c b/drivers/dma/ioat/init.c index 9103a0425f75..88bd06704ecc 100644 --- a/drivers/dma/ioat/init.c +++ b/drivers/dma/ioat/init.c @@ -1429,6 +1429,7 @@ module_init(ioat_init_module); static void __exit ioat_exit_module(void) { pci_unregister_driver(&ioat_pci_driver); + kmem_cache_destroy(ioat_sed_cache); kmem_cache_destroy(ioat_cache); } module_exit(ioat_exit_module); diff --git a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c index a4c9a326e9f5..e8b2635ecb14 100644 --- a/drivers/gpu/drm/amd/amdgpu/kv_dpm.c +++ b/drivers/gpu/drm/amd/amdgpu/kv_dpm.c @@ -165,6 +165,8 @@ static void sumo_construct_vid_mapping_table(struct amdgpu_device *adev, for (i = 0; i < SUMO_MAX_HARDWARE_POWERLEVELS; i++) { if (table[i].ulSupportedSCLK != 0) { + if (table[i].usVoltageIndex >= SUMO_MAX_NUMBER_VOLTAGES) + continue; vid_mapping_table->entries[table[i].usVoltageIndex].vid_7bit = table[i].usVoltageID; vid_mapping_table->entries[table[i].usVoltageIndex].vid_2bit = diff --git a/drivers/gpu/drm/bridge/panel.c b/drivers/gpu/drm/bridge/panel.c index e0cca19b4044..71611e1fdd22 100644 --- a/drivers/gpu/drm/bridge/panel.c +++ b/drivers/gpu/drm/bridge/panel.c @@ -197,9 +197,12 @@ EXPORT_SYMBOL(drm_panel_bridge_remove); static void devm_drm_panel_bridge_release(struct device *dev, void *res) { - struct drm_bridge **bridge = res; + struct drm_bridge *bridge = *(struct drm_bridge **)res; - drm_panel_bridge_remove(*bridge); + if (!bridge) + return; + + drm_bridge_remove(bridge); } struct drm_bridge *devm_drm_panel_bridge_add(struct device *dev, diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c b/drivers/gpu/drm/exynos/exynos_drm_vidi.c index f36d4df4d481..e1b6b0cc4fcc 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c @@ -302,6 +302,7 @@ static int vidi_get_modes(struct drm_connector *connector) struct vidi_context *ctx = ctx_from_connector(connector); struct edid *edid; int edid_len; + int count; /* * the edid data comes from user side and it would be set @@ -321,7 +322,11 @@ static int vidi_get_modes(struct drm_connector *connector) drm_mode_connector_update_edid_property(connector, edid); - return drm_add_edid_modes(connector, edid); + count = drm_add_edid_modes(connector, edid); + + kfree(edid); + + return count; } static const struct drm_connector_helper_funcs vidi_connector_helper_funcs = { diff --git a/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c b/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c index 4bc8e9fe3095..166e020a9335 100644 --- a/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c +++ b/drivers/gpu/drm/nouveau/dispnv04/tvnv17.c @@ -208,6 +208,8 @@ static int nv17_tv_get_ld_modes(struct drm_encoder *encoder, struct drm_display_mode *mode; mode = drm_mode_duplicate(encoder->dev, tv_mode); + if (!mode) + continue; mode->clock = tv_norm->tv_enc_mode.vrefresh * mode->htotal / 1000 * @@ -257,6 +259,8 @@ static int nv17_tv_get_hd_modes(struct drm_encoder *encoder, if (modes[i].hdisplay == output_mode->hdisplay && modes[i].vdisplay == output_mode->vdisplay) { mode = drm_mode_duplicate(encoder->dev, output_mode); + if (!mode) + continue; mode->type |= DRM_MODE_TYPE_PREFERRED; } else { @@ -264,6 +268,8 @@ static int nv17_tv_get_hd_modes(struct drm_encoder *encoder, modes[i].vdisplay, 60, false, (output_mode->flags & DRM_MODE_FLAG_INTERLACE), false); + if (!mode) + continue; } /* CVT modes are sometimes unsuitable... */ diff --git a/drivers/gpu/drm/radeon/sumo_dpm.c b/drivers/gpu/drm/radeon/sumo_dpm.c index 258cca4ae59b..b6f78ab073d3 100644 --- a/drivers/gpu/drm/radeon/sumo_dpm.c +++ b/drivers/gpu/drm/radeon/sumo_dpm.c @@ -1621,6 +1621,8 @@ void sumo_construct_vid_mapping_table(struct radeon_device *rdev, for (i = 0; i < SUMO_MAX_HARDWARE_POWERLEVELS; i++) { if (table[i].ulSupportedSCLK != 0) { + if (table[i].usVoltageIndex >= SUMO_MAX_NUMBER_VOLTAGES) + continue; vid_mapping_table->entries[table[i].usVoltageIndex].vid_7bit = table[i].usVoltageID; vid_mapping_table->entries[table[i].usVoltageIndex].vid_2bit = diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index 2100ed7cee7b..26ca8447bfa1 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c @@ -1258,7 +1258,6 @@ static void implement(const struct hid_device *hid, u8 *report, hid_warn(hid, "%s() called with too large value %d (n: %d)! (%s)\n", __func__, value, n, current->comm); - WARN_ON(1); value &= m; } } diff --git a/drivers/hv/hv_util.c b/drivers/hv/hv_util.c index 8b2ebcab1518..8a5fdcbd2095 100644 --- a/drivers/hv/hv_util.c +++ b/drivers/hv/hv_util.c @@ -294,10 +294,23 @@ static void timesync_onchannelcallback(void *context) struct ictimesync_ref_data *refdata; u8 *time_txf_buf = util_timesynch.recv_buffer; - vmbus_recvpacket(channel, time_txf_buf, - PAGE_SIZE, &recvlen, &requestid); + /* + * Drain the ring buffer and use the last packet to update + * host_ts + */ + while (1) { + int ret = vmbus_recvpacket(channel, time_txf_buf, + PAGE_SIZE, &recvlen, + &requestid); + if (ret) { + pr_warn_once("TimeSync IC pkt recv failed (Err: %d)\n", + ret); + break; + } + + if (!recvlen) + break; - if (recvlen > 0) { icmsghdrp = (struct icmsg_hdr *)&time_txf_buf[ sizeof(struct vmbuspipe_hdr)]; diff --git a/drivers/hwtracing/intel_th/pci.c b/drivers/hwtracing/intel_th/pci.c index 625e6dc4e3f4..22cda2742b55 100644 --- a/drivers/hwtracing/intel_th/pci.c +++ b/drivers/hwtracing/intel_th/pci.c @@ -263,6 +263,11 @@ static const struct pci_device_id intel_th_pci_id_table[] = { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xae24), .driver_data = (kernel_ulong_t)&intel_th_2x, }, + { + /* Meteor Lake-S */ + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x7f26), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, { /* Raptor Lake-S */ PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x7a26), @@ -273,6 +278,26 @@ static const struct pci_device_id intel_th_pci_id_table[] = { PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x7e24), .driver_data = (kernel_ulong_t)&intel_th_2x, }, + { + /* Granite Rapids */ + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x0963), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, + { + /* Granite Rapids SOC */ + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x3256), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, + { + /* Sapphire Rapids SOC */ + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x3456), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, + { + /* Lunar Lake */ + PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0xa824), + .driver_data = (kernel_ulong_t)&intel_th_2x, + }, { /* Rocket Lake CPU */ PCI_DEVICE(PCI_VENDOR_ID_INTEL, 0x4c19), diff --git a/drivers/i2c/busses/i2c-ocores.c b/drivers/i2c/busses/i2c-ocores.c index 8c42ca7107b2..cf59196807ea 100644 --- a/drivers/i2c/busses/i2c-ocores.c +++ b/drivers/i2c/busses/i2c-ocores.c @@ -25,7 +25,12 @@ #include #include #include +#include +/** + * @process_lock: protect I2C transfer process. + * ocores_process() and ocores_process_timeout() can't run in parallel. + */ struct ocores_i2c { void __iomem *base; u32 reg_shift; @@ -36,6 +41,7 @@ struct ocores_i2c { int pos; int nmsgs; int state; /* see STATE_ */ + spinlock_t process_lock; struct clk *clk; int ip_clock_khz; int bus_clock_khz; @@ -141,19 +147,26 @@ static void ocores_process(struct ocores_i2c *i2c) { struct i2c_msg *msg = i2c->msg; u8 stat = oc_getreg(i2c, OCI2C_STATUS); + unsigned long flags; + + /* + * If we spin here is because we are in timeout, so we are going + * to be in STATE_ERROR. See ocores_process_timeout() + */ + spin_lock_irqsave(&i2c->process_lock, flags); if ((i2c->state == STATE_DONE) || (i2c->state == STATE_ERROR)) { /* stop has been sent */ oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_IACK); wake_up(&i2c->wait); - return; + goto out; } /* error? */ if (stat & OCI2C_STAT_ARBLOST) { i2c->state = STATE_ERROR; oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_STOP); - return; + goto out; } if ((i2c->state == STATE_START) || (i2c->state == STATE_WRITE)) { @@ -163,7 +176,7 @@ static void ocores_process(struct ocores_i2c *i2c) if (stat & OCI2C_STAT_NACK) { i2c->state = STATE_ERROR; oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_STOP); - return; + goto out; } } else msg->buf[i2c->pos++] = oc_getreg(i2c, OCI2C_DATA); @@ -184,14 +197,14 @@ static void ocores_process(struct ocores_i2c *i2c) oc_setreg(i2c, OCI2C_DATA, addr); oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_START); - return; + goto out; } else i2c->state = (msg->flags & I2C_M_RD) ? STATE_READ : STATE_WRITE; } else { i2c->state = STATE_DONE; oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_STOP); - return; + goto out; } } @@ -202,6 +215,9 @@ static void ocores_process(struct ocores_i2c *i2c) oc_setreg(i2c, OCI2C_DATA, msg->buf[i2c->pos++]); oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_WRITE); } + +out: + spin_unlock_irqrestore(&i2c->process_lock, flags); } static irqreturn_t ocores_isr(int irq, void *dev_id) @@ -213,9 +229,24 @@ static irqreturn_t ocores_isr(int irq, void *dev_id) return IRQ_HANDLED; } +/** + * Process timeout event + * @i2c: ocores I2C device instance + */ +static void ocores_process_timeout(struct ocores_i2c *i2c) +{ + unsigned long flags; + + spin_lock_irqsave(&i2c->process_lock, flags); + i2c->state = STATE_ERROR; + oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_STOP); + spin_unlock_irqrestore(&i2c->process_lock, flags); +} + static int ocores_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) { struct ocores_i2c *i2c = i2c_get_adapdata(adap); + int ret; i2c->msg = msgs; i2c->pos = 0; @@ -228,11 +259,14 @@ static int ocores_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_START); - if (wait_event_timeout(i2c->wait, (i2c->state == STATE_ERROR) || - (i2c->state == STATE_DONE), HZ)) - return (i2c->state == STATE_DONE) ? num : -EIO; - else + ret = wait_event_timeout(i2c->wait, (i2c->state == STATE_ERROR) || + (i2c->state == STATE_DONE), HZ); + if (ret == 0) { + ocores_process_timeout(i2c); return -ETIMEDOUT; + } + + return (i2c->state == STATE_DONE) ? num : -EIO; } static int ocores_init(struct device *dev, struct ocores_i2c *i2c) @@ -259,8 +293,8 @@ static int ocores_init(struct device *dev, struct ocores_i2c *i2c) oc_setreg(i2c, OCI2C_PREHIGH, prescale >> 8); /* Init the device */ - oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_IACK); oc_setreg(i2c, OCI2C_CONTROL, ctrl | OCI2C_CTRL_IEN | OCI2C_CTRL_EN); + oc_setreg(i2c, OCI2C_CMD, OCI2C_CMD_IACK); return 0; } @@ -425,6 +459,8 @@ static int ocores_i2c_probe(struct platform_device *pdev) if (!i2c) return -ENOMEM; + spin_lock_init(&i2c->process_lock); + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); i2c->base = devm_ioremap_resource(&pdev->dev, res); if (IS_ERR(i2c->base)) diff --git a/drivers/iio/adc/ad7266.c b/drivers/iio/adc/ad7266.c index b8d5cfd57ec4..fb2d2432e49c 100644 --- a/drivers/iio/adc/ad7266.c +++ b/drivers/iio/adc/ad7266.c @@ -160,6 +160,8 @@ static int ad7266_read_raw(struct iio_dev *indio_dev, ret = ad7266_read_single(st, val, chan->address); iio_device_release_direct_mode(indio_dev); + if (ret < 0) + return ret; *val = (*val >> 2) & 0xfff; if (chan->scan_type.sign == 's') *val = sign_extend32(*val, 11); diff --git a/drivers/iio/dac/ad5592r-base.c b/drivers/iio/dac/ad5592r-base.c index 126bb8349363..9736cc8e6a27 100644 --- a/drivers/iio/dac/ad5592r-base.c +++ b/drivers/iio/dac/ad5592r-base.c @@ -158,7 +158,6 @@ static void ad5592r_gpio_cleanup(struct ad5592r_state *st) static int ad5592r_reset(struct ad5592r_state *st) { struct gpio_desc *gpio; - struct iio_dev *iio_dev = iio_priv_to_dev(st); gpio = devm_gpiod_get_optional(st->dev, "reset", GPIOD_OUT_LOW); if (IS_ERR(gpio)) @@ -168,10 +167,10 @@ static int ad5592r_reset(struct ad5592r_state *st) udelay(1); gpiod_set_value(gpio, 1); } else { - mutex_lock(&iio_dev->mlock); + mutex_lock(&st->lock); /* Writing this magic value resets the device */ st->ops->reg_write(st, AD5592R_REG_RESET, 0xdac); - mutex_unlock(&iio_dev->mlock); + mutex_unlock(&st->lock); } udelay(250); @@ -199,7 +198,6 @@ static int ad5592r_set_channel_modes(struct ad5592r_state *st) const struct ad5592r_rw_ops *ops = st->ops; int ret; unsigned i; - struct iio_dev *iio_dev = iio_priv_to_dev(st); u8 pulldown = 0, tristate = 0, dac = 0, adc = 0; u16 read_back; @@ -249,7 +247,7 @@ static int ad5592r_set_channel_modes(struct ad5592r_state *st) } } - mutex_lock(&iio_dev->mlock); + mutex_lock(&st->lock); /* Pull down unused pins to GND */ ret = ops->reg_write(st, AD5592R_REG_PULLDOWN, pulldown); @@ -287,7 +285,7 @@ static int ad5592r_set_channel_modes(struct ad5592r_state *st) ret = -EIO; err_unlock: - mutex_unlock(&iio_dev->mlock); + mutex_unlock(&st->lock); return ret; } @@ -316,11 +314,11 @@ static int ad5592r_write_raw(struct iio_dev *iio_dev, if (!chan->output) return -EINVAL; - mutex_lock(&iio_dev->mlock); + mutex_lock(&st->lock); ret = st->ops->write_dac(st, chan->channel, val); if (!ret) st->cached_dac[chan->channel] = val; - mutex_unlock(&iio_dev->mlock); + mutex_unlock(&st->lock); return ret; case IIO_CHAN_INFO_SCALE: if (chan->type == IIO_VOLTAGE) { @@ -335,12 +333,12 @@ static int ad5592r_write_raw(struct iio_dev *iio_dev, else return -EINVAL; - mutex_lock(&iio_dev->mlock); + mutex_lock(&st->lock); ret = st->ops->reg_read(st, AD5592R_REG_CTRL, &st->cached_gp_ctrl); if (ret < 0) { - mutex_unlock(&iio_dev->mlock); + mutex_unlock(&st->lock); return ret; } @@ -362,7 +360,7 @@ static int ad5592r_write_raw(struct iio_dev *iio_dev, ret = st->ops->reg_write(st, AD5592R_REG_CTRL, st->cached_gp_ctrl); - mutex_unlock(&iio_dev->mlock); + mutex_unlock(&st->lock); return ret; } @@ -380,11 +378,11 @@ static int ad5592r_read_raw(struct iio_dev *iio_dev, { struct ad5592r_state *st = iio_priv(iio_dev); u16 read_val; - int ret; + int ret, mult; switch (m) { case IIO_CHAN_INFO_RAW: - mutex_lock(&iio_dev->mlock); + mutex_lock(&st->lock); if (!chan->output) { ret = st->ops->read_adc(st, chan->channel, &read_val); @@ -417,29 +415,27 @@ static int ad5592r_read_raw(struct iio_dev *iio_dev, s64 tmp = *val * (3767897513LL / 25LL); *val = div_s64_rem(tmp, 1000000000LL, val2); - return IIO_VAL_INT_PLUS_MICRO; - } else { - int mult; - - mutex_lock(&iio_dev->mlock); - - if (chan->output) - mult = !!(st->cached_gp_ctrl & - AD5592R_REG_CTRL_DAC_RANGE); - else - mult = !!(st->cached_gp_ctrl & - AD5592R_REG_CTRL_ADC_RANGE); - - *val *= ++mult; - - *val2 = chan->scan_type.realbits; - ret = IIO_VAL_FRACTIONAL_LOG2; + return IIO_VAL_INT_PLUS_NANO; } + + mutex_lock(&st->lock); + + if (chan->output) + mult = !!(st->cached_gp_ctrl & + AD5592R_REG_CTRL_DAC_RANGE); + else + mult = !!(st->cached_gp_ctrl & + AD5592R_REG_CTRL_ADC_RANGE); + + *val *= ++mult; + + *val2 = chan->scan_type.realbits; + ret = IIO_VAL_FRACTIONAL_LOG2; break; case IIO_CHAN_INFO_OFFSET: ret = ad5592r_get_vref(st); - mutex_lock(&iio_dev->mlock); + mutex_lock(&st->lock); if (st->cached_gp_ctrl & AD5592R_REG_CTRL_ADC_RANGE) *val = (-34365 * 25) / ret; @@ -452,7 +448,7 @@ static int ad5592r_read_raw(struct iio_dev *iio_dev, } unlock: - mutex_unlock(&iio_dev->mlock); + mutex_unlock(&st->lock); return ret; } @@ -627,6 +623,8 @@ int ad5592r_probe(struct device *dev, const char *name, iio_dev->info = &ad5592r_info; iio_dev->modes = INDIO_DIRECT_MODE; + mutex_init(&st->lock); + ad5592r_init_scales(st, ad5592r_get_vref(st)); ret = ad5592r_reset(st); diff --git a/drivers/iio/dac/ad5592r-base.h b/drivers/iio/dac/ad5592r-base.h index 841457e93f85..046936068b63 100644 --- a/drivers/iio/dac/ad5592r-base.h +++ b/drivers/iio/dac/ad5592r-base.h @@ -53,6 +53,7 @@ struct ad5592r_state { struct regulator *reg; struct gpio_chip gpiochip; struct mutex gpio_lock; /* Protect cached gpio_out, gpio_val, etc. */ + struct mutex lock; unsigned int num_channels; const struct ad5592r_rw_ops *ops; int scale_avail[2][2]; diff --git a/drivers/input/input.c b/drivers/input/input.c index f9f3d6261dc5..85e9c9649da8 100644 --- a/drivers/input/input.c +++ b/drivers/input/input.c @@ -1337,19 +1337,19 @@ static int input_print_modalias_bits(char *buf, int size, char name, unsigned long *bm, unsigned int min_bit, unsigned int max_bit) { - int len = 0, i; + int bit = min_bit; + int len = 0; len += snprintf(buf, max(size, 0), "%c", name); - for (i = min_bit; i < max_bit; i++) - if (bm[BIT_WORD(i)] & BIT_MASK(i)) - len += snprintf(buf + len, max(size - len, 0), "%X,", i); + for_each_set_bit_from(bit, bm, max_bit) + len += snprintf(buf + len, max(size - len, 0), "%X,", bit); return len; } -static int input_print_modalias(char *buf, int size, struct input_dev *id, - int add_cr) +static int input_print_modalias_parts(char *buf, int size, int full_len, + struct input_dev *id) { - int len; + int len, klen, remainder, space; len = snprintf(buf, max(size, 0), "input:b%04Xv%04Xp%04Xe%04X-", @@ -1358,8 +1358,49 @@ static int input_print_modalias(char *buf, int size, struct input_dev *id, len += input_print_modalias_bits(buf + len, size - len, 'e', id->evbit, 0, EV_MAX); - len += input_print_modalias_bits(buf + len, size - len, + + /* + * Calculate the remaining space in the buffer making sure we + * have place for the terminating 0. + */ + space = max(size - (len + 1), 0); + + klen = input_print_modalias_bits(buf + len, size - len, 'k', id->keybit, KEY_MIN_INTERESTING, KEY_MAX); + len += klen; + + /* + * If we have more data than we can fit in the buffer, check + * if we can trim key data to fit in the rest. We will indicate + * that key data is incomplete by adding "+" sign at the end, like + * this: * "k1,2,3,45,+,". + * + * Note that we shortest key info (if present) is "k+," so we + * can only try to trim if key data is longer than that. + */ + if (full_len && size < full_len + 1 && klen > 3) { + remainder = full_len - len; + /* + * We can only trim if we have space for the remainder + * and also for at least "k+," which is 3 more characters. + */ + if (remainder <= space - 3) { + int i; + /* + * We are guaranteed to have 'k' in the buffer, so + * we need at least 3 additional bytes for storing + * "+," in addition to the remainder. + */ + for (i = size - 1 - remainder - 3; i >= 0; i--) { + if (buf[i] == 'k' || buf[i] == ',') { + strcpy(buf + i + 1, "+,"); + len = i + 3; /* Not counting '\0' */ + break; + } + } + } + } + len += input_print_modalias_bits(buf + len, size - len, 'r', id->relbit, 0, REL_MAX); len += input_print_modalias_bits(buf + len, size - len, @@ -1375,12 +1416,25 @@ static int input_print_modalias(char *buf, int size, struct input_dev *id, len += input_print_modalias_bits(buf + len, size - len, 'w', id->swbit, 0, SW_MAX); - if (add_cr) - len += snprintf(buf + len, max(size - len, 0), "\n"); - return len; } +static int input_print_modalias(char *buf, int size, struct input_dev *id) +{ + int full_len; + + /* + * Printing is done in 2 passes: first one figures out total length + * needed for the modalias string, second one will try to trim key + * data in case when buffer is too small for the entire modalias. + * If the buffer is too small regardless, it will fill as much as it + * can (without trimming key data) into the buffer and leave it to + * the caller to figure out what to do with the result. + */ + full_len = input_print_modalias_parts(NULL, 0, 0, id); + return input_print_modalias_parts(buf, size, full_len, id); +} + static ssize_t input_dev_show_modalias(struct device *dev, struct device_attribute *attr, char *buf) @@ -1388,7 +1442,9 @@ static ssize_t input_dev_show_modalias(struct device *dev, struct input_dev *id = to_input_dev(dev); ssize_t len; - len = input_print_modalias(buf, PAGE_SIZE, id, 1); + len = input_print_modalias(buf, PAGE_SIZE, id); + if (len < PAGE_SIZE - 2) + len += snprintf(buf + len, PAGE_SIZE - len, "\n"); return min_t(int, len, PAGE_SIZE); } @@ -1561,6 +1617,23 @@ static int input_add_uevent_bm_var(struct kobj_uevent_env *env, return 0; } +/* + * This is a pretty gross hack. When building uevent data the driver core + * may try adding more environment variables to kobj_uevent_env without + * telling us, so we have no idea how much of the buffer we can use to + * avoid overflows/-ENOMEM elsewhere. To work around this let's artificially + * reduce amount of memory we will use for the modalias environment variable. + * + * The potential additions are: + * + * SEQNUM=18446744073709551615 - (%llu - 28 bytes) + * HOME=/ (6 bytes) + * PATH=/sbin:/bin:/usr/sbin:/usr/bin (34 bytes) + * + * 68 bytes total. Allow extra buffer - 96 bytes + */ +#define UEVENT_ENV_EXTRA_LEN 96 + static int input_add_uevent_modalias_var(struct kobj_uevent_env *env, struct input_dev *dev) { @@ -1570,9 +1643,11 @@ static int input_add_uevent_modalias_var(struct kobj_uevent_env *env, return -ENOMEM; len = input_print_modalias(&env->buf[env->buflen - 1], - sizeof(env->buf) - env->buflen, - dev, 0); - if (len >= (sizeof(env->buf) - env->buflen)) + (int)sizeof(env->buf) - env->buflen - + UEVENT_ENV_EXTRA_LEN, + dev); + if (len >= ((int)sizeof(env->buf) - env->buflen - + UEVENT_ENV_EXTRA_LEN)) return -ENOMEM; env->buflen += len; diff --git a/drivers/iommu/amd_iommu_init.c b/drivers/iommu/amd_iommu_init.c index 2cbf32172b88..1ad1a3d76058 100644 --- a/drivers/iommu/amd_iommu_init.c +++ b/drivers/iommu/amd_iommu_init.c @@ -1392,8 +1392,17 @@ static int __init init_iommu_from_acpi(struct amd_iommu *iommu, return 0; } +static void __init free_sysfs(struct amd_iommu *iommu) +{ + if (iommu->iommu.dev) { + iommu_device_unregister(&iommu->iommu); + iommu_device_sysfs_remove(&iommu->iommu); + } +} + static void __init free_iommu_one(struct amd_iommu *iommu) { + free_sysfs(iommu); free_command_buffer(iommu); free_event_buffer(iommu); free_ppr_log(iommu); diff --git a/drivers/media/dvb-core/dvbdev.c b/drivers/media/dvb-core/dvbdev.c index fd59027ed95c..e655b6698736 100644 --- a/drivers/media/dvb-core/dvbdev.c +++ b/drivers/media/dvb-core/dvbdev.c @@ -953,7 +953,7 @@ int dvb_usercopy(struct file *file, int (*func)(struct file *file, unsigned int cmd, void *arg)) { - char sbuf[128]; + char sbuf[128] = {}; void *mbuf = NULL; void *parg = NULL; int err = -EINVAL; diff --git a/drivers/media/media-devnode.c b/drivers/media/media-devnode.c index 423248f577b6..7b044d7189d3 100644 --- a/drivers/media/media-devnode.c +++ b/drivers/media/media-devnode.c @@ -253,15 +253,14 @@ int __must_check media_devnode_register(struct media_device *mdev, devnode->cdev.owner = owner; /* Part 3: Add the media and char device */ + set_bit(MEDIA_FLAG_REGISTERED, &devnode->flags); ret = cdev_device_add(&devnode->cdev, &devnode->dev); if (ret < 0) { + clear_bit(MEDIA_FLAG_REGISTERED, &devnode->flags); pr_err("%s: cdev_device_add failed\n", __func__); goto cdev_add_error; } - /* Part 4: Activate this minor. The char device can now be used. */ - set_bit(MEDIA_FLAG_REGISTERED, &devnode->flags); - return 0; cdev_add_error: diff --git a/drivers/misc/mei/pci-me.c b/drivers/misc/mei/pci-me.c index 04bf2dd134d0..c6abe176dc7e 100644 --- a/drivers/misc/mei/pci-me.c +++ b/drivers/misc/mei/pci-me.c @@ -372,8 +372,10 @@ static int mei_me_pci_resume(struct device *device) } err = mei_restart(dev); - if (err) + if (err) { + free_irq(pdev->irq, dev); return err; + } /* Start timer if stopped in suspend */ schedule_delayed_work(&dev->timer_work, HZ); diff --git a/drivers/misc/vmw_vmci/vmci_event.c b/drivers/misc/vmw_vmci/vmci_event.c index 84258a48029d..da24cb341a7f 100644 --- a/drivers/misc/vmw_vmci/vmci_event.c +++ b/drivers/misc/vmw_vmci/vmci_event.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -94,9 +95,12 @@ static void event_deliver(struct vmci_event_msg *event_msg) { struct vmci_subscription *cur; struct list_head *subscriber_list; + u32 sanitized_event, max_vmci_event; rcu_read_lock(); - subscriber_list = &subscriber_array[event_msg->event_data.event]; + max_vmci_event = ARRAY_SIZE(subscriber_array); + sanitized_event = array_index_nospec(event_msg->event_data.event, max_vmci_event); + subscriber_list = &subscriber_array[sanitized_event]; list_for_each_entry_rcu(cur, subscriber_list, node) { cur->callback(cur->id, &event_msg->event_data, cur->callback_data); diff --git a/drivers/mmc/host/sdhci-pci-core.c b/drivers/mmc/host/sdhci-pci-core.c index 3f069926e4a3..987501d1f34e 100644 --- a/drivers/mmc/host/sdhci-pci-core.c +++ b/drivers/mmc/host/sdhci-pci-core.c @@ -846,7 +846,7 @@ static int jmicron_pmos(struct sdhci_pci_chip *chip, int on) ret = pci_read_config_byte(chip->pdev, 0xAE, &scratch); if (ret) - return ret; + goto fail; /* * Turn PMOS on [bit 0], set over current detection to 2.4 V @@ -857,7 +857,10 @@ static int jmicron_pmos(struct sdhci_pci_chip *chip, int on) else scratch &= ~0x47; - return pci_write_config_byte(chip->pdev, 0xAE, scratch); + ret = pci_write_config_byte(chip->pdev, 0xAE, scratch); + +fail: + return pcibios_err_to_errno(ret); } static int jmicron_probe(struct sdhci_pci_chip *chip) @@ -1718,7 +1721,7 @@ static int sdhci_pci_probe(struct pci_dev *pdev, ret = pci_read_config_byte(pdev, PCI_SLOT_INFO, &slots); if (ret) - return ret; + return pcibios_err_to_errno(ret); slots = PCI_SLOT_INFO_SLOTS(slots) + 1; dev_dbg(&pdev->dev, "found %d slot(s)\n", slots); @@ -1729,7 +1732,7 @@ static int sdhci_pci_probe(struct pci_dev *pdev, ret = pci_read_config_byte(pdev, PCI_SLOT_INFO, &first_bar); if (ret) - return ret; + return pcibios_err_to_errno(ret); first_bar &= PCI_SLOT_INFO_FIRST_BAR_MASK; diff --git a/drivers/net/usb/ax88179_178a.c b/drivers/net/usb/ax88179_178a.c index 8ac2bfcdba66..98c21667f388 100644 --- a/drivers/net/usb/ax88179_178a.c +++ b/drivers/net/usb/ax88179_178a.c @@ -357,7 +357,8 @@ static void ax88179_status(struct usbnet *dev, struct urb *urb) if (netif_carrier_ok(dev->net) != link) { usbnet_link_change(dev, link, 1); - netdev_info(dev->net, "ax88179 - Link status is: %d\n", link); + if (!link) + netdev_info(dev->net, "ax88179 - Link status is: 0\n"); } } @@ -1549,6 +1550,7 @@ static int ax88179_link_reset(struct usbnet *dev) GMII_PHY_PHYSR, 2, &tmp16); if (!(tmp16 & GMII_PHY_PHYSR_LINK)) { + netdev_info(dev->net, "ax88179 - Link status is: 0\n"); return 0; } else if (GMII_PHY_PHYSR_GIGA == (tmp16 & GMII_PHY_PHYSR_SMASK)) { mode |= AX_MEDIUM_GIGAMODE | AX_MEDIUM_EN_125MHZ; @@ -1586,6 +1588,8 @@ static int ax88179_link_reset(struct usbnet *dev) netif_carrier_on(dev->net); + netdev_info(dev->net, "ax88179 - Link status is: 1\n"); + return 0; } diff --git a/drivers/net/usb/rtl8150.c b/drivers/net/usb/rtl8150.c index 3f4fc78498e0..4cde752f0ee7 100644 --- a/drivers/net/usb/rtl8150.c +++ b/drivers/net/usb/rtl8150.c @@ -803,7 +803,8 @@ static int rtl8150_get_link_ksettings(struct net_device *netdev, struct ethtool_link_ksettings *ecmd) { rtl8150_t *dev = netdev_priv(netdev); - short lpa, bmcr; + short lpa = 0; + short bmcr = 0; u32 supported; supported = (SUPPORTED_10baseT_Half | diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c index 8e1a3c523b09..f90b95b0c2e8 100644 --- a/drivers/net/virtio_net.c +++ b/drivers/net/virtio_net.c @@ -2568,8 +2568,15 @@ static int virtnet_probe(struct virtio_device *vdev) dev->features |= dev->hw_features & NETIF_F_ALL_TSO; /* (!csum && gso) case will be fixed by register_netdev() */ } - if (virtio_has_feature(vdev, VIRTIO_NET_F_GUEST_CSUM)) - dev->features |= NETIF_F_RXCSUM; + + /* 1. With VIRTIO_NET_F_GUEST_CSUM negotiation, the driver doesn't + * need to calculate checksums for partially checksummed packets, + * as they're considered valid by the upper layer. + * 2. Without VIRTIO_NET_F_GUEST_CSUM negotiation, the driver only + * receives fully checksummed packets. The device may assist in + * validating these packets' checksums, so the driver won't have to. + */ + dev->features |= NETIF_F_RXCSUM; dev->vlan_features = dev->features; diff --git a/drivers/net/vxlan.c b/drivers/net/vxlan.c index 31657f15eb07..3aa49417cdfd 100644 --- a/drivers/net/vxlan.c +++ b/drivers/net/vxlan.c @@ -1013,6 +1013,10 @@ static bool vxlan_snoop(struct net_device *dev, struct vxlan_fdb *f; u32 ifindex = 0; + /* Ignore packets from invalid src-address */ + if (!is_valid_ether_addr(src_mac)) + return true; + #if IS_ENABLED(CONFIG_IPV6) if (src_ip->sa.sa_family == AF_INET6 && (ipv6_addr_type(&src_ip->sin6.sin6_addr) & IPV6_ADDR_LINKLOCAL)) diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c index 754dcc1c1f40..dcc425727957 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/fw.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/fw.c @@ -149,20 +149,10 @@ void iwl_mvm_mfu_assert_dump_notif(struct iwl_mvm *mvm, { struct iwl_rx_packet *pkt = rxb_addr(rxb); struct iwl_mfu_assert_dump_notif *mfu_dump_notif = (void *)pkt->data; - __le32 *dump_data = mfu_dump_notif->data; - int n_words = le32_to_cpu(mfu_dump_notif->data_size) / sizeof(__le32); - int i; if (mfu_dump_notif->index_num == 0) IWL_INFO(mvm, "MFUART assert id 0x%x occurred\n", le32_to_cpu(mfu_dump_notif->assert_id)); - - for (i = 0; i < n_words; i++) - IWL_DEBUG_INFO(mvm, - "MFUART assert dump, dword %u: 0x%08x\n", - le16_to_cpu(mfu_dump_notif->index_num) * - n_words + i, - le32_to_cpu(dump_data[i])); } static bool iwl_alive_fn(struct iwl_notif_wait_data *notif_wait, diff --git a/drivers/pinctrl/core.c b/drivers/pinctrl/core.c index ee2666d87287..5a6e23c74c22 100644 --- a/drivers/pinctrl/core.c +++ b/drivers/pinctrl/core.c @@ -1050,8 +1050,8 @@ static struct pinctrl *create_pinctrl(struct device *dev, * an -EPROBE_DEFER later, as that is the worst case. */ if (ret == -EPROBE_DEFER) { - pinctrl_free(p, false); mutex_unlock(&pinctrl_maps_mutex); + pinctrl_free(p, false); return ERR_PTR(ret); } } diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-rockchip.c index 1f4b9fc9e278..f7e5b02867a8 100644 --- a/drivers/pinctrl/pinctrl-rockchip.c +++ b/drivers/pinctrl/pinctrl-rockchip.c @@ -658,23 +658,68 @@ static struct rockchip_mux_recalced_data rk3128_mux_recalced_data[] = { static struct rockchip_mux_recalced_data rk3328_mux_recalced_data[] = { { - .num = 2, - .pin = 12, - .reg = 0x24, - .bit = 8, - .mask = 0x3 - }, { + /* gpio2_b7_sel */ .num = 2, .pin = 15, .reg = 0x28, .bit = 0, .mask = 0x7 }, { + /* gpio2_c7_sel */ .num = 2, .pin = 23, .reg = 0x30, .bit = 14, .mask = 0x3 + }, { + /* gpio3_b1_sel */ + .num = 3, + .pin = 9, + .reg = 0x44, + .bit = 2, + .mask = 0x3 + }, { + /* gpio3_b2_sel */ + .num = 3, + .pin = 10, + .reg = 0x44, + .bit = 4, + .mask = 0x3 + }, { + /* gpio3_b3_sel */ + .num = 3, + .pin = 11, + .reg = 0x44, + .bit = 6, + .mask = 0x3 + }, { + /* gpio3_b4_sel */ + .num = 3, + .pin = 12, + .reg = 0x44, + .bit = 8, + .mask = 0x3 + }, { + /* gpio3_b5_sel */ + .num = 3, + .pin = 13, + .reg = 0x44, + .bit = 10, + .mask = 0x3 + }, { + /* gpio3_b6_sel */ + .num = 3, + .pin = 14, + .reg = 0x44, + .bit = 12, + .mask = 0x3 + }, { + /* gpio3_b7_sel */ + .num = 3, + .pin = 15, + .reg = 0x44, + .bit = 14, + .mask = 0x3 }, }; @@ -1976,8 +2021,10 @@ static int rockchip_pmx_set(struct pinctrl_dev *pctldev, unsigned selector, if (ret) { /* revert the already done pin settings */ - for (cnt--; cnt >= 0; cnt--) + for (cnt--; cnt >= 0; cnt--) { + bank = pin_to_bank(info, pins[cnt]); rockchip_set_mux(bank, pins[cnt] - bank->pin_base, 0); + } return ret; } @@ -3416,7 +3463,7 @@ static struct rockchip_pin_bank rk3328_pin_banks[] = { PIN_BANK_IOMUX_FLAGS(0, 32, "gpio0", 0, 0, 0, 0), PIN_BANK_IOMUX_FLAGS(1, 32, "gpio1", 0, 0, 0, 0), PIN_BANK_IOMUX_FLAGS(2, 32, "gpio2", 0, - IOMUX_WIDTH_3BIT, + 0, IOMUX_WIDTH_3BIT, 0), PIN_BANK_IOMUX_FLAGS(3, 32, "gpio3", diff --git a/drivers/ptp/ptp_chardev.c b/drivers/ptp/ptp_chardev.c index a08d555963f8..4570f914582d 100644 --- a/drivers/ptp/ptp_chardev.c +++ b/drivers/ptp/ptp_chardev.c @@ -97,7 +97,8 @@ int ptp_set_pinfunc(struct ptp_clock *ptp, unsigned int pin, } if (info->verify(info, pin, func, chan)) { - pr_err("driver cannot use function %u on pin %u\n", func, chan); + pr_err("driver cannot use function %u and channel %u on pin %u\n", + func, chan, pin); return -EOPNOTSUPP; } diff --git a/drivers/pwm/pwm-stm32.c b/drivers/pwm/pwm-stm32.c index 6139512aab7b..5668e3a2f0ea 100644 --- a/drivers/pwm/pwm-stm32.c +++ b/drivers/pwm/pwm-stm32.c @@ -84,6 +84,9 @@ static int stm32_pwm_config(struct stm32_pwm *priv, int ch, prd = div; + if (!prd) + return -EINVAL; + if (prescaler > MAX_TIM_PSC) return -EINVAL; diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 0d9db5239034..8b5481423b29 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -2618,6 +2618,7 @@ struct regmap *regulator_get_regmap(struct regulator *regulator) return map ? map : ERR_PTR(-EOPNOTSUPP); } +EXPORT_SYMBOL_GPL(regulator_get_regmap); /** * regulator_get_hardware_vsel_register - get the HW voltage selector register diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.c b/drivers/scsi/mpt3sas/mpt3sas_base.c index 8c53c87b9e28..17c75293ad19 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_base.c +++ b/drivers/scsi/mpt3sas/mpt3sas_base.c @@ -5438,6 +5438,12 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc) ioc->pd_handles_sz = (ioc->facts.MaxDevHandle / 8); if (ioc->facts.MaxDevHandle % 8) ioc->pd_handles_sz++; + /* + * pd_handles_sz should have, at least, the minimal room for + * set_bit()/test_bit(), otherwise out-of-memory touch may occur. + */ + ioc->pd_handles_sz = ALIGN(ioc->pd_handles_sz, sizeof(unsigned long)); + ioc->pd_handles = kzalloc(ioc->pd_handles_sz, GFP_KERNEL); if (!ioc->pd_handles) { @@ -5455,6 +5461,13 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc) ioc->pend_os_device_add_sz = (ioc->facts.MaxDevHandle / 8); if (ioc->facts.MaxDevHandle % 8) ioc->pend_os_device_add_sz++; + + /* + * pend_os_device_add_sz should have, at least, the minimal room for + * set_bit()/test_bit(), otherwise out-of-memory may occur. + */ + ioc->pend_os_device_add_sz = ALIGN(ioc->pend_os_device_add_sz, + sizeof(unsigned long)); ioc->pend_os_device_add = kzalloc(ioc->pend_os_device_add_sz, GFP_KERNEL); if (!ioc->pend_os_device_add) { @@ -5537,6 +5550,13 @@ mpt3sas_base_attach(struct MPT3SAS_ADAPTER *ioc) if (r) goto out_free_resources; + /* + * Copy current copy of IOCFacts in prev_fw_facts + * and it will be used during online firmware upgrade. + */ + memcpy(&ioc->prev_fw_facts, &ioc->facts, + sizeof(struct mpt3sas_facts)); + ioc->non_operational_loop = 0; ioc->got_task_abort_from_ioctl = 0; return 0; @@ -5705,6 +5725,91 @@ mpt3sas_wait_for_commands_to_complete(struct MPT3SAS_ADAPTER *ioc) wait_event_timeout(ioc->reset_wq, ioc->pending_io_count == 0, 10 * HZ); } +/** + * _base_check_ioc_facts_changes - Look for increase/decrease of IOCFacts + * attributes during online firmware upgrade and update the corresponding + * IOC variables accordingly. + * + * @ioc: Pointer to MPT_ADAPTER structure + */ +static int +_base_check_ioc_facts_changes(struct MPT3SAS_ADAPTER *ioc) +{ + u16 pd_handles_sz; + void *pd_handles = NULL, *blocking_handles = NULL; + void *pend_os_device_add = NULL, *device_remove_in_progress = NULL; + struct mpt3sas_facts *old_facts = &ioc->prev_fw_facts; + + if (ioc->facts.MaxDevHandle > old_facts->MaxDevHandle) { + pd_handles_sz = (ioc->facts.MaxDevHandle / 8); + if (ioc->facts.MaxDevHandle % 8) + pd_handles_sz++; + + /* + * pd_handles should have, at least, the minimal room for + * set_bit()/test_bit(), otherwise out-of-memory touch may + * occur. + */ + pd_handles_sz = ALIGN(pd_handles_sz, sizeof(unsigned long)); + pd_handles = krealloc(ioc->pd_handles, pd_handles_sz, + GFP_KERNEL); + if (!pd_handles) { + ioc_info(ioc, + "Unable to allocate the memory for pd_handles of sz: %d\n", + pd_handles_sz); + return -ENOMEM; + } + memset(pd_handles + ioc->pd_handles_sz, 0, + (pd_handles_sz - ioc->pd_handles_sz)); + ioc->pd_handles = pd_handles; + + blocking_handles = krealloc(ioc->blocking_handles, + pd_handles_sz, GFP_KERNEL); + if (!blocking_handles) { + ioc_info(ioc, + "Unable to allocate the memory for " + "blocking_handles of sz: %d\n", + pd_handles_sz); + return -ENOMEM; + } + memset(blocking_handles + ioc->pd_handles_sz, 0, + (pd_handles_sz - ioc->pd_handles_sz)); + ioc->blocking_handles = blocking_handles; + ioc->pd_handles_sz = pd_handles_sz; + + pend_os_device_add = krealloc(ioc->pend_os_device_add, + pd_handles_sz, GFP_KERNEL); + if (!pend_os_device_add) { + ioc_info(ioc, + "Unable to allocate the memory for pend_os_device_add of sz: %d\n", + pd_handles_sz); + return -ENOMEM; + } + memset(pend_os_device_add + ioc->pend_os_device_add_sz, 0, + (pd_handles_sz - ioc->pend_os_device_add_sz)); + ioc->pend_os_device_add = pend_os_device_add; + ioc->pend_os_device_add_sz = pd_handles_sz; + + device_remove_in_progress = krealloc( + ioc->device_remove_in_progress, pd_handles_sz, GFP_KERNEL); + if (!device_remove_in_progress) { + ioc_info(ioc, + "Unable to allocate the memory for " + "device_remove_in_progress of sz: %d\n " + , pd_handles_sz); + return -ENOMEM; + } + memset(device_remove_in_progress + + ioc->device_remove_in_progress_sz, 0, + (pd_handles_sz - ioc->device_remove_in_progress_sz)); + ioc->device_remove_in_progress = device_remove_in_progress; + ioc->device_remove_in_progress_sz = pd_handles_sz; + } + + memcpy(&ioc->prev_fw_facts, &ioc->facts, sizeof(struct mpt3sas_facts)); + return 0; +} + /** * mpt3sas_base_hard_reset_handler - reset controller * @ioc: Pointer to MPT_ADAPTER structure @@ -5777,6 +5882,13 @@ mpt3sas_base_hard_reset_handler(struct MPT3SAS_ADAPTER *ioc, if (r) goto out; + r = _base_check_ioc_facts_changes(ioc); + if (r) { + ioc_info(ioc, + "Some of the parameters got changed in this new firmware" + " image and it requires system reboot\n"); + goto out; + } if (ioc->rdpq_array_enable && !ioc->rdpq_array_capable) panic("%s: Issue occurred with flashing controller firmware." "Please reboot the system and ensure that the correct" diff --git a/drivers/scsi/mpt3sas/mpt3sas_base.h b/drivers/scsi/mpt3sas/mpt3sas_base.h index 2948cb7e9ae6..afd6134ecd26 100644 --- a/drivers/scsi/mpt3sas/mpt3sas_base.h +++ b/drivers/scsi/mpt3sas/mpt3sas_base.h @@ -142,6 +142,15 @@ */ #define MPT3SAS_FMT "%s: " +#define ioc_err(ioc, fmt, ...) \ + pr_err("%s: " fmt, (ioc)->name, ##__VA_ARGS__) +#define ioc_notice(ioc, fmt, ...) \ + pr_notice("%s: " fmt, (ioc)->name, ##__VA_ARGS__) +#define ioc_warn(ioc, fmt, ...) \ + pr_warn("%s: " fmt, (ioc)->name, ##__VA_ARGS__) +#define ioc_info(ioc, fmt, ...) \ + pr_info("%s: " fmt, (ioc)->name, ##__VA_ARGS__) + /* * WarpDrive Specific Log codes */ @@ -872,6 +881,7 @@ typedef void (*MPT3SAS_FLUSH_RUNNING_CMDS)(struct MPT3SAS_ADAPTER *ioc); * @event_log: event log pointer * @event_masks: events that are masked * @facts: static facts data + * @prev_fw_facts: previous fw facts data * @pfacts: static port facts data * @manu_pg0: static manufacturing page 0 * @manu_pg10: static manufacturing page 10 @@ -1064,6 +1074,7 @@ struct MPT3SAS_ADAPTER { /* static config pages */ struct mpt3sas_facts facts; + struct mpt3sas_facts prev_fw_facts; struct mpt3sas_port_facts *pfacts; Mpi2ManufacturingPage0_t manu_pg0; struct Mpi2ManufacturingPage10_t manu_pg10; diff --git a/drivers/scsi/qedi/qedi_debugfs.c b/drivers/scsi/qedi/qedi_debugfs.c index 39d77818a677..d5460fc17bab 100644 --- a/drivers/scsi/qedi/qedi_debugfs.c +++ b/drivers/scsi/qedi/qedi_debugfs.c @@ -136,15 +136,11 @@ static ssize_t qedi_dbg_do_not_recover_cmd_read(struct file *filp, char __user *buffer, size_t count, loff_t *ppos) { - size_t cnt = 0; + char buf[64]; + int len; - if (*ppos) - return 0; - - cnt = sprintf(buffer, "do_not_recover=%d\n", qedi_do_not_recover); - cnt = min_t(int, count, cnt - *ppos); - *ppos += cnt; - return cnt; + len = sprintf(buf, "do_not_recover=%d\n", qedi_do_not_recover); + return simple_read_from_buffer(buffer, count, ppos, buf, len); } static int diff --git a/drivers/soc/ti/wkup_m3_ipc.c b/drivers/soc/ti/wkup_m3_ipc.c index 1223eed329ea..afe4fed15618 100644 --- a/drivers/soc/ti/wkup_m3_ipc.c +++ b/drivers/soc/ti/wkup_m3_ipc.c @@ -22,7 +22,6 @@ #include #include #include -#include #include #include #include @@ -140,7 +139,6 @@ static irqreturn_t wkup_m3_txev_handler(int irq, void *ipc_data) static int wkup_m3_ping(struct wkup_m3_ipc *m3_ipc) { struct device *dev = m3_ipc->dev; - mbox_msg_t dummy_msg = 0; int ret; if (!m3_ipc->mbox) { @@ -156,7 +154,7 @@ static int wkup_m3_ping(struct wkup_m3_ipc *m3_ipc) * the RX callback to avoid multiple interrupts being received * by the CM3. */ - ret = mbox_send_message(m3_ipc->mbox, &dummy_msg); + ret = mbox_send_message(m3_ipc->mbox, NULL); if (ret < 0) { dev_err(dev, "%s: mbox_send_message() failed: %d\n", __func__, ret); @@ -178,7 +176,6 @@ static int wkup_m3_ping(struct wkup_m3_ipc *m3_ipc) static int wkup_m3_ping_noirq(struct wkup_m3_ipc *m3_ipc) { struct device *dev = m3_ipc->dev; - mbox_msg_t dummy_msg = 0; int ret; if (!m3_ipc->mbox) { @@ -187,7 +184,7 @@ static int wkup_m3_ping_noirq(struct wkup_m3_ipc *m3_ipc) return -EIO; } - ret = mbox_send_message(m3_ipc->mbox, &dummy_msg); + ret = mbox_send_message(m3_ipc->mbox, NULL); if (ret < 0) { dev_err(dev, "%s: mbox_send_message() failed: %d\n", __func__, ret); diff --git a/drivers/target/target_core_configfs.c b/drivers/target/target_core_configfs.c index e3f08c982151..7e87d952bb7a 100644 --- a/drivers/target/target_core_configfs.c +++ b/drivers/target/target_core_configfs.c @@ -3211,8 +3211,6 @@ static int __init target_core_init_configfs(void) { struct configfs_subsystem *subsys = &target_core_fabrics; struct t10_alua_lu_gp *lu_gp; - struct cred *kern_cred; - const struct cred *old_cred; int ret; pr_debug("TARGET_CORE[0]: Loading Generic Kernel Storage" @@ -3289,20 +3287,9 @@ static int __init target_core_init_configfs(void) if (ret < 0) goto out; - /* We use the kernel credentials to access the target directory */ - kern_cred = prepare_kernel_cred(&init_task); - if (!kern_cred) { - ret = -ENOMEM; - goto out; - } - old_cred = override_creds(kern_cred); - revert_creds(old_cred); - put_cred(kern_cred); - return 0; out: - target_xcopy_release_pt(); configfs_unregister_subsystem(subsys); core_dev_release_virtual_lun0(); rd_module_exit(); diff --git a/drivers/tty/serial/mcf.c b/drivers/tty/serial/mcf.c index 02eb32217685..eacce82b971d 100644 --- a/drivers/tty/serial/mcf.c +++ b/drivers/tty/serial/mcf.c @@ -483,7 +483,7 @@ static const struct uart_ops mcf_uart_ops = { .verify_port = mcf_verify_port, }; -static struct mcf_uart mcf_ports[4]; +static struct mcf_uart mcf_ports[10]; #define MCF_MAXPORTS ARRAY_SIZE(mcf_ports) diff --git a/drivers/tty/serial/sc16is7xx.c b/drivers/tty/serial/sc16is7xx.c index f8f3a1168b0c..da67ddecd195 100644 --- a/drivers/tty/serial/sc16is7xx.c +++ b/drivers/tty/serial/sc16is7xx.c @@ -494,16 +494,28 @@ static bool sc16is7xx_regmap_precious(struct device *dev, unsigned int reg) return false; } +/* + * Configure programmable baud rate generator (divisor) according to the + * desired baud rate. + * + * From the datasheet, the divisor is computed according to: + * + * XTAL1 input frequency + * ----------------------- + * prescaler + * divisor = --------------------------- + * baud-rate x sampling-rate + */ static int sc16is7xx_set_baud(struct uart_port *port, int baud) { struct sc16is7xx_port *s = dev_get_drvdata(port->dev); u8 lcr; - u8 prescaler = 0; + unsigned int prescaler = 1; unsigned long clk = port->uartclk, div = clk / 16 / baud; - if (div > 0xffff) { - prescaler = SC16IS7XX_MCR_CLKSEL_BIT; - div /= 4; + if (div >= BIT(16)) { + prescaler = 4; + div /= prescaler; } /* In an amazing feat of design, the Enhanced Features Register shares @@ -538,9 +550,10 @@ static int sc16is7xx_set_baud(struct uart_port *port, int baud) mutex_unlock(&s->efr_lock); + /* If bit MCR_CLKSEL is set, the divide by 4 prescaler is activated. */ sc16is7xx_port_update(port, SC16IS7XX_MCR_REG, SC16IS7XX_MCR_CLKSEL_BIT, - prescaler); + prescaler == 1 ? 0 : SC16IS7XX_MCR_CLKSEL_BIT); /* Open the LCR divisors for configuration */ sc16is7xx_port_write(port, SC16IS7XX_LCR_REG, @@ -555,7 +568,7 @@ static int sc16is7xx_set_baud(struct uart_port *port, int baud) /* Put LCR back to the normal mode */ sc16is7xx_port_write(port, SC16IS7XX_LCR_REG, lcr); - return DIV_ROUND_CLOSEST(clk / 16, div); + return DIV_ROUND_CLOSEST((clk / prescaler) / 16, div); } static void sc16is7xx_handle_rx(struct uart_port *port, unsigned int rxlen, diff --git a/drivers/usb/atm/cxacru.c b/drivers/usb/atm/cxacru.c index 5160a4a966b3..a317d4d3fa51 100644 --- a/drivers/usb/atm/cxacru.c +++ b/drivers/usb/atm/cxacru.c @@ -1134,6 +1134,7 @@ static int cxacru_bind(struct usbatm_data *usbatm_instance, struct cxacru_data *instance; struct usb_device *usb_dev = interface_to_usbdev(intf); struct usb_host_endpoint *cmd_ep = usb_dev->ep_in[CXACRU_EP_CMD]; + struct usb_endpoint_descriptor *in, *out; int ret; /* instance init */ @@ -1180,6 +1181,19 @@ static int cxacru_bind(struct usbatm_data *usbatm_instance, goto fail; } + if (usb_endpoint_xfer_int(&cmd_ep->desc)) + ret = usb_find_common_endpoints(intf->cur_altsetting, + NULL, NULL, &in, &out); + else + ret = usb_find_common_endpoints(intf->cur_altsetting, + &in, &out, NULL, NULL); + + if (ret) { + usb_err(usbatm_instance, "cxacru_bind: interface has incorrect endpoints\n"); + ret = -ENODEV; + goto fail; + } + if ((cmd_ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT) { usb_fill_int_urb(instance->rcv_urb, diff --git a/drivers/usb/class/cdc-wdm.c b/drivers/usb/class/cdc-wdm.c index daa696e61ee4..a612ca628cef 100644 --- a/drivers/usb/class/cdc-wdm.c +++ b/drivers/usb/class/cdc-wdm.c @@ -249,14 +249,14 @@ static void wdm_int_callback(struct urb *urb) dev_err(&desc->intf->dev, "Stall on int endpoint\n"); goto sw; /* halt is cleared in work */ default: - dev_err(&desc->intf->dev, + dev_err_ratelimited(&desc->intf->dev, "nonzero urb status received: %d\n", status); break; } } if (urb->actual_length < sizeof(struct usb_cdc_notification)) { - dev_err(&desc->intf->dev, "wdm_int_callback - %d bytes\n", + dev_err_ratelimited(&desc->intf->dev, "wdm_int_callback - %d bytes\n", urb->actual_length); goto exit; } diff --git a/drivers/usb/gadget/function/f_fs.c b/drivers/usb/gadget/function/f_fs.c index 64880a2cbf34..3d55cf1a0cf1 100644 --- a/drivers/usb/gadget/function/f_fs.c +++ b/drivers/usb/gadget/function/f_fs.c @@ -817,6 +817,7 @@ static void ffs_user_copy_worker(struct work_struct *work) int ret = io_data->req->status ? io_data->req->status : io_data->req->actual; bool kiocb_has_eventfd = io_data->kiocb->ki_flags & IOCB_EVENTFD; + unsigned long flags; ffs_log("enter: ret %d for %s", ret, io_data->read ? "read" : "write"); @@ -835,7 +836,10 @@ static void ffs_user_copy_worker(struct work_struct *work) if (io_data->ffs->ffs_eventfd && !kiocb_has_eventfd) eventfd_signal(io_data->ffs->ffs_eventfd, 1); + spin_lock_irqsave(&io_data->ffs->eps_lock, flags); usb_ep_free_request(io_data->ep, io_data->req); + io_data->req = NULL; + spin_unlock_irqrestore(&io_data->ffs->eps_lock, flags); if (io_data->read) kfree(io_data->to_free); diff --git a/drivers/usb/gadget/function/f_printer.c b/drivers/usb/gadget/function/f_printer.c index 830cc2bb0fdf..fa28f2d3a8f7 100644 --- a/drivers/usb/gadget/function/f_printer.c +++ b/drivers/usb/gadget/function/f_printer.c @@ -212,6 +212,7 @@ static inline struct usb_endpoint_descriptor *ep_desc(struct usb_gadget *gadget, struct usb_endpoint_descriptor *ss) { switch (gadget->speed) { + case USB_SPEED_SUPER_PLUS: case USB_SPEED_SUPER: return ss; case USB_SPEED_HIGH: diff --git a/drivers/usb/host/xhci-pci.c b/drivers/usb/host/xhci-pci.c index b9cb8daf9705..f9de602a0c00 100644 --- a/drivers/usb/host/xhci-pci.c +++ b/drivers/usb/host/xhci-pci.c @@ -43,6 +43,7 @@ #define PCI_VENDOR_ID_ETRON 0x1b6f #define PCI_DEVICE_ID_EJ168 0x7023 +#define PCI_DEVICE_ID_EJ188 0x7052 #define PCI_DEVICE_ID_INTEL_LYNXPOINT_XHCI 0x8c31 #define PCI_DEVICE_ID_INTEL_LYNXPOINT_LP_XHCI 0x9c31 @@ -224,6 +225,12 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) xhci->quirks |= XHCI_TRUST_TX_LENGTH; xhci->quirks |= XHCI_BROKEN_STREAMS; } + if (pdev->vendor == PCI_VENDOR_ID_ETRON && + pdev->device == PCI_DEVICE_ID_EJ188) { + xhci->quirks |= XHCI_RESET_ON_RESUME; + xhci->quirks |= XHCI_BROKEN_STREAMS; + } + if (pdev->vendor == PCI_VENDOR_ID_RENESAS && pdev->device == 0x0014) xhci->quirks |= XHCI_TRUST_TX_LENGTH; @@ -270,6 +277,11 @@ static void xhci_pci_quirks(struct device *dev, struct xhci_hcd *xhci) pdev->device == 0x9026) xhci->quirks |= XHCI_RESET_PLL_ON_DISCONNECT; + if (pdev->vendor == PCI_VENDOR_ID_AMD && + (pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_2 || + pdev->device == PCI_DEVICE_ID_AMD_PROMONTORYA_4)) + xhci->quirks |= XHCI_NO_SOFT_RETRY; + if (xhci->quirks & XHCI_RESET_ON_RESUME) xhci_dbg_trace(xhci, trace_xhci_dbg_quirks, "QUIRK: Resetting on resume"); diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index e27e54244725..d712b13a5ae2 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c @@ -1227,6 +1227,10 @@ static void xhci_handle_cmd_reset_ep(struct xhci_hcd *xhci, int slot_id, /* Clear our internal halted state */ ep->ep_state &= ~EP_HALTED; } + + /* if this was a soft reset, then restart */ + if ((le32_to_cpu(trb->generic.field[3])) & TRB_TSP) + ring_doorbell_for_active_rings(xhci, slot_id, ep_index); } static void xhci_handle_cmd_enable_slot(struct xhci_hcd *xhci, int slot_id, @@ -1920,8 +1924,7 @@ struct xhci_segment *trb_in_td(struct xhci_hcd *xhci, static void xhci_cleanup_halted_endpoint(struct xhci_hcd *xhci, unsigned int slot_id, unsigned int ep_index, - unsigned int stream_id, - struct xhci_td *td, union xhci_trb *ep_trb, + unsigned int stream_id, struct xhci_td *td, enum xhci_ep_reset_type reset_type) { struct xhci_virt_ep *ep = &xhci->devs[slot_id]->eps[ep_index]; @@ -2064,8 +2067,7 @@ static int finish_td(struct xhci_hcd *xhci, struct xhci_td *td, * The class driver clears the device side halt later. */ xhci_cleanup_halted_endpoint(xhci, slot_id, ep_index, - ep_ring->stream_id, td, ep_trb, - EP_HARD_RESET); + ep_ring->stream_id, td, EP_HARD_RESET); } else { /* Update ring dequeue pointer */ while (ep_ring->dequeue != td->last_trb) @@ -2317,10 +2319,16 @@ static int process_bulk_intr_td(struct xhci_hcd *xhci, struct xhci_td *td, union xhci_trb *ep_trb, struct xhci_transfer_event *event, struct xhci_virt_ep *ep, int *status) { + struct xhci_slot_ctx *slot_ctx; struct xhci_ring *ep_ring; u32 trb_comp_code; u32 remaining, requested, ep_trb_len; + unsigned int slot_id; + int ep_index; + slot_id = TRB_TO_SLOT_ID(le32_to_cpu(event->flags)); + slot_ctx = xhci_get_slot_ctx(xhci, xhci->devs[slot_id]->out_ctx); + ep_index = TRB_TO_EP_ID(le32_to_cpu(event->flags)) - 1; ep_ring = xhci_dma_to_transfer_ring(ep, le64_to_cpu(event->buffer)); trb_comp_code = GET_COMP_CODE(le32_to_cpu(event->transfer_len)); remaining = EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)); @@ -2329,6 +2337,7 @@ static int process_bulk_intr_td(struct xhci_hcd *xhci, struct xhci_td *td, switch (trb_comp_code) { case COMP_SUCCESS: + ep_ring->err_count = 0; /* handle success with untransferred data as short packet */ if (ep_trb != td->last_trb || remaining) { xhci_warn(xhci, "WARN Successful completion on short TX\n"); @@ -2349,9 +2358,17 @@ static int process_bulk_intr_td(struct xhci_hcd *xhci, struct xhci_td *td, goto finish_td; case COMP_STOPPED_LENGTH_INVALID: /* stopped on ep trb with invalid length, exclude it */ - ep_trb_len = 0; - remaining = 0; - break; + td->urb->actual_length = sum_trb_lengths(xhci, ep_ring, ep_trb); + goto finish_td; + case COMP_USB_TRANSACTION_ERROR: + if (xhci->quirks & XHCI_NO_SOFT_RETRY || + (ep_ring->err_count++ > MAX_SOFT_RETRY) || + le32_to_cpu(slot_ctx->tt_info) & TT_SLOT) + break; + *status = 0; + xhci_cleanup_halted_endpoint(xhci, slot_id, ep_index, + ep_ring->stream_id, td, EP_SOFT_RESET); + return 0; default: /* do nothing */ break; @@ -2426,7 +2443,7 @@ static int handle_tx_event(struct xhci_hcd *xhci, case COMP_INVALID_STREAM_TYPE_ERROR: case COMP_INVALID_STREAM_ID_ERROR: xhci_cleanup_halted_endpoint(xhci, slot_id, ep_index, 0, - NULL, NULL, EP_SOFT_RESET); + NULL, EP_SOFT_RESET); goto cleanup; case COMP_RING_UNDERRUN: case COMP_RING_OVERRUN: @@ -2694,8 +2711,7 @@ static int handle_tx_event(struct xhci_hcd *xhci, xhci_cleanup_halted_endpoint(xhci, slot_id, ep_index, ep_ring->stream_id, - td, ep_trb, - EP_HARD_RESET); + td, EP_HARD_RESET); goto cleanup; } diff --git a/drivers/usb/host/xhci.h b/drivers/usb/host/xhci.h index c84e26e710d4..3bb89e04f8f7 100644 --- a/drivers/usb/host/xhci.h +++ b/drivers/usb/host/xhci.h @@ -1506,6 +1506,7 @@ static inline const char *xhci_trb_type_string(u8 type) /* How much data is left before the 64KB boundary? */ #define TRB_BUFF_LEN_UP_TO_BOUNDARY(addr) (TRB_MAX_BUFF_SIZE - \ (addr & (TRB_MAX_BUFF_SIZE - 1))) +#define MAX_SOFT_RETRY 3 struct xhci_segment { union xhci_trb *trbs; @@ -1593,6 +1594,7 @@ struct xhci_ring { * if we own the TRB (if we are the consumer). See section 4.9.1. */ u32 cycle_state; + unsigned int err_count; unsigned int stream_id; unsigned int num_segs; unsigned int num_trbs_free; @@ -1853,6 +1855,7 @@ struct xhci_hcd { #define XHCI_INTEL_USB_ROLE_SW BIT_ULL(31) #define XHCI_RESET_PLL_ON_DISCONNECT BIT_ULL(34) #define XHCI_SNPS_BROKEN_SUSPEND BIT_ULL(35) +#define XHCI_NO_SOFT_RETRY BIT_ULL(40) unsigned int num_active_eps; unsigned int limit_active_eps; diff --git a/drivers/usb/misc/uss720.c b/drivers/usb/misc/uss720.c index de73f33dc739..e08019b0e2d4 100644 --- a/drivers/usb/misc/uss720.c +++ b/drivers/usb/misc/uss720.c @@ -690,7 +690,7 @@ static int uss720_probe(struct usb_interface *intf, struct parport_uss720_private *priv; struct parport *pp; unsigned char reg; - int i; + int ret; dev_dbg(&intf->dev, "probe: vendor id 0x%x, device id 0x%x\n", le16_to_cpu(usbdev->descriptor.idVendor), @@ -701,8 +701,8 @@ static int uss720_probe(struct usb_interface *intf, usb_put_dev(usbdev); return -ENODEV; } - i = usb_set_interface(usbdev, intf->altsetting->desc.bInterfaceNumber, 2); - dev_dbg(&intf->dev, "set interface result %d\n", i); + ret = usb_set_interface(usbdev, intf->altsetting->desc.bInterfaceNumber, 2); + dev_dbg(&intf->dev, "set interface result %d\n", ret); interface = intf->cur_altsetting; @@ -738,12 +738,18 @@ static int uss720_probe(struct usb_interface *intf, set_1284_register(pp, 7, 0x00, GFP_KERNEL); set_1284_register(pp, 6, 0x30, GFP_KERNEL); /* PS/2 mode */ set_1284_register(pp, 2, 0x0c, GFP_KERNEL); - /* debugging */ - get_1284_register(pp, 0, ®, GFP_KERNEL); - dev_dbg(&intf->dev, "reg: %7ph\n", priv->reg); - i = usb_find_last_int_in_endpoint(interface, &epd); - if (!i) { + /* The Belkin F5U002 Rev 2 P80453-B USB parallel port adapter shares the + * device ID 050d:0002 with some other device that works with this + * driver, but it itself does not. Detect and handle the bad cable + * here. */ + ret = get_1284_register(pp, 0, ®, GFP_KERNEL); + dev_dbg(&intf->dev, "reg: %7ph\n", priv->reg); + if (ret < 0) + return ret; + + ret = usb_find_last_int_in_endpoint(interface, &epd); + if (!ret) { dev_dbg(&intf->dev, "epaddr %d interval %d\n", epd->bEndpointAddress, epd->bInterval); } diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c index 972bf4210189..ffeaa2208123 100644 --- a/drivers/usb/musb/da8xx.c +++ b/drivers/usb/musb/da8xx.c @@ -580,7 +580,7 @@ static int da8xx_probe(struct platform_device *pdev) ret = of_platform_populate(pdev->dev.of_node, NULL, da8xx_auxdata_lookup, &pdev->dev); if (ret) - return ret; + goto err_unregister_phy; memset(musb_resources, 0x00, sizeof(*musb_resources) * ARRAY_SIZE(musb_resources)); @@ -606,9 +606,13 @@ static int da8xx_probe(struct platform_device *pdev) ret = PTR_ERR_OR_ZERO(glue->musb); if (ret) { dev_err(&pdev->dev, "failed to register musb device: %d\n", ret); - usb_phy_generic_unregister(glue->usb_phy); + goto err_unregister_phy; } + return 0; + +err_unregister_phy: + usb_phy_generic_unregister(glue->usb_phy); return ret; } diff --git a/drivers/usb/storage/alauda.c b/drivers/usb/storage/alauda.c index 263847bf1fe5..e181dbe88f85 100644 --- a/drivers/usb/storage/alauda.c +++ b/drivers/usb/storage/alauda.c @@ -117,6 +117,8 @@ struct alauda_info { unsigned char sense_key; unsigned long sense_asc; /* additional sense code */ unsigned long sense_ascq; /* additional sense code qualifier */ + + bool media_initialized; }; #define short_pack(lsb,msb) ( ((u16)(lsb)) | ( ((u16)(msb))<<8 ) ) @@ -488,11 +490,12 @@ static int alauda_check_media(struct us_data *us) } /* Check for media change */ - if (status[0] & 0x08) { + if (status[0] & 0x08 || !info->media_initialized) { usb_stor_dbg(us, "Media change detected\n"); alauda_free_maps(&MEDIA_INFO(us)); - alauda_init_media(us); - + rc = alauda_init_media(us); + if (rc == USB_STOR_TRANSPORT_GOOD) + info->media_initialized = true; info->sense_key = UNIT_ATTENTION; info->sense_asc = 0x28; info->sense_ascq = 0x00; diff --git a/fs/jfs/xattr.c b/fs/jfs/xattr.c index a6797986b625..e8b12e708428 100644 --- a/fs/jfs/xattr.c +++ b/fs/jfs/xattr.c @@ -570,9 +570,11 @@ static int ea_get(struct inode *inode, struct ea_buffer *ea_buf, int min_size) size_check: if (EALIST_SIZE(ea_buf->xattr) != ea_size) { + int size = min_t(int, EALIST_SIZE(ea_buf->xattr), ea_size); + printk(KERN_ERR "ea_get: invalid extended attribute\n"); print_hex_dump(KERN_ERR, "", DUMP_PREFIX_ADDRESS, 16, 1, - ea_buf->xattr, ea_size, 1); + ea_buf->xattr, size, 1); ea_release(inode, ea_buf); rc = -EIO; goto clean_up; diff --git a/fs/nilfs2/dir.c b/fs/nilfs2/dir.c index 7f3931f79e21..eed73d59ec08 100644 --- a/fs/nilfs2/dir.c +++ b/fs/nilfs2/dir.c @@ -195,19 +195,24 @@ fail: return false; } -static struct page *nilfs_get_page(struct inode *dir, unsigned long n) +static void *nilfs_get_page(struct inode *dir, unsigned long n, + struct page **pagep) { struct address_space *mapping = dir->i_mapping; struct page *page = read_mapping_page(mapping, n, NULL); + void *kaddr; - if (!IS_ERR(page)) { - kmap(page); - if (unlikely(!PageChecked(page))) { - if (PageError(page) || !nilfs_check_page(page)) - goto fail; - } + if (IS_ERR(page)) + return page; + + kaddr = kmap(page); + if (unlikely(!PageChecked(page))) { + if (!nilfs_check_page(page)) + goto fail; } - return page; + + *pagep = page; + return kaddr; fail: nilfs_put_page(page); @@ -284,14 +289,14 @@ static int nilfs_readdir(struct file *file, struct dir_context *ctx) for ( ; n < npages; n++, offset = 0) { char *kaddr, *limit; struct nilfs_dir_entry *de; - struct page *page = nilfs_get_page(inode, n); + struct page *page; - if (IS_ERR(page)) { + kaddr = nilfs_get_page(inode, n, &page); + if (IS_ERR(kaddr)) { nilfs_error(sb, "bad page in #%lu", inode->i_ino); ctx->pos += PAGE_SIZE - offset; return -EIO; } - kaddr = page_address(page); de = (struct nilfs_dir_entry *)(kaddr + offset); limit = kaddr + nilfs_last_byte(inode, n) - NILFS_DIR_REC_LEN(1); @@ -354,11 +359,9 @@ nilfs_find_entry(struct inode *dir, const struct qstr *qstr, start = 0; n = start; do { - char *kaddr; + char *kaddr = nilfs_get_page(dir, n, &page); - page = nilfs_get_page(dir, n); - if (!IS_ERR(page)) { - kaddr = page_address(page); + if (!IS_ERR(kaddr)) { de = (struct nilfs_dir_entry *)kaddr; kaddr += nilfs_last_byte(dir, n) - reclen; while ((char *) de <= kaddr) { @@ -396,15 +399,11 @@ found: struct nilfs_dir_entry *nilfs_dotdot(struct inode *dir, struct page **p) { - struct page *page = nilfs_get_page(dir, 0); - struct nilfs_dir_entry *de = NULL; + struct nilfs_dir_entry *de = nilfs_get_page(dir, 0, p); - if (!IS_ERR(page)) { - de = nilfs_next_entry( - (struct nilfs_dir_entry *)page_address(page)); - *p = page; - } - return de; + if (IS_ERR(de)) + return NULL; + return nilfs_next_entry(de); } ino_t nilfs_inode_by_name(struct inode *dir, const struct qstr *qstr) @@ -468,12 +467,11 @@ int nilfs_add_link(struct dentry *dentry, struct inode *inode) for (n = 0; n <= npages; n++) { char *dir_end; - page = nilfs_get_page(dir, n); - err = PTR_ERR(page); - if (IS_ERR(page)) + kaddr = nilfs_get_page(dir, n, &page); + err = PTR_ERR(kaddr); + if (IS_ERR(kaddr)) goto out; lock_page(page); - kaddr = page_address(page); dir_end = kaddr + nilfs_last_byte(dir, n); de = (struct nilfs_dir_entry *)kaddr; kaddr += PAGE_SIZE - reclen; @@ -636,11 +634,10 @@ int nilfs_empty_dir(struct inode *inode) char *kaddr; struct nilfs_dir_entry *de; - page = nilfs_get_page(inode, i); - if (IS_ERR(page)) - continue; + kaddr = nilfs_get_page(inode, i, &page); + if (IS_ERR(kaddr)) + return 0; - kaddr = page_address(page); de = (struct nilfs_dir_entry *)kaddr; kaddr += nilfs_last_byte(inode, i) - NILFS_DIR_REC_LEN(1); diff --git a/fs/nilfs2/segment.c b/fs/nilfs2/segment.c index bfe121170d4e..32e5095e4c77 100644 --- a/fs/nilfs2/segment.c +++ b/fs/nilfs2/segment.c @@ -1701,6 +1701,7 @@ static void nilfs_segctor_prepare_write(struct nilfs_sc_info *sci) if (bh->b_page != bd_page) { if (bd_page) { lock_page(bd_page); + wait_on_page_writeback(bd_page); clear_page_dirty_for_io(bd_page); set_page_writeback(bd_page); unlock_page(bd_page); @@ -1714,6 +1715,7 @@ static void nilfs_segctor_prepare_write(struct nilfs_sc_info *sci) if (bh == segbuf->sb_super_root) { if (bh->b_page != bd_page) { lock_page(bd_page); + wait_on_page_writeback(bd_page); clear_page_dirty_for_io(bd_page); set_page_writeback(bd_page); unlock_page(bd_page); @@ -1730,6 +1732,7 @@ static void nilfs_segctor_prepare_write(struct nilfs_sc_info *sci) } if (bd_page) { lock_page(bd_page); + wait_on_page_writeback(bd_page); clear_page_dirty_for_io(bd_page); set_page_writeback(bd_page); unlock_page(bd_page); diff --git a/fs/ocfs2/file.c b/fs/ocfs2/file.c index 60b7098f7a11..d8924de8da27 100644 --- a/fs/ocfs2/file.c +++ b/fs/ocfs2/file.c @@ -1946,6 +1946,8 @@ static int __ocfs2_change_file_space(struct file *file, struct inode *inode, inode_lock(inode); + /* Wait all existing dio workers, newcomers will block on i_rwsem */ + inode_dio_wait(inode); /* * This prevents concurrent writes on other nodes */ diff --git a/fs/ocfs2/namei.c b/fs/ocfs2/namei.c index f36a338bf727..89d0f6360693 100644 --- a/fs/ocfs2/namei.c +++ b/fs/ocfs2/namei.c @@ -570,7 +570,7 @@ static int __ocfs2_mknod_locked(struct inode *dir, fe->i_last_eb_blk = 0; strcpy(fe->i_signature, OCFS2_INODE_SIGNATURE); fe->i_flags |= cpu_to_le32(OCFS2_VALID_FL); - ktime_get_real_ts64(&ts); + ts = current_kernel_time64(); fe->i_atime = fe->i_ctime = fe->i_mtime = cpu_to_le64(ts.tv_sec); fe->i_mtime_nsec = fe->i_ctime_nsec = fe->i_atime_nsec = diff --git a/fs/open.c b/fs/open.c index 649b03d9d1ac..548494f1277c 100644 --- a/fs/open.c +++ b/fs/open.c @@ -219,13 +219,13 @@ out: return error; } -SYSCALL_DEFINE2(ftruncate, unsigned int, fd, unsigned long, length) +SYSCALL_DEFINE2(ftruncate, unsigned int, fd, off_t, length) { return do_sys_ftruncate(fd, length, 1); } #ifdef CONFIG_COMPAT -COMPAT_SYSCALL_DEFINE2(ftruncate, unsigned int, fd, compat_ulong_t, length) +COMPAT_SYSCALL_DEFINE2(ftruncate, unsigned int, fd, compat_off_t, length) { return do_sys_ftruncate(fd, length, 1); } diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c index 0bfd71bec7f2..33976fa7f078 100644 --- a/fs/proc/vmcore.c +++ b/fs/proc/vmcore.c @@ -242,6 +242,8 @@ static ssize_t __read_vmcore(char *buffer, size_t buflen, loff_t *fpos, /* leave now if filled buffer already */ if (buflen == 0) return acc; + + cond_resched(); } list_for_each_entry(m, &vmcore_list, list) { diff --git a/fs/udf/inode.c b/fs/udf/inode.c index a9fef5bb9d25..f402189909d2 100644 --- a/fs/udf/inode.c +++ b/fs/udf/inode.c @@ -1471,15 +1471,9 @@ reread: inode->i_blocks = le64_to_cpu(fe->logicalBlocksRecorded) << (inode->i_sb->s_blocksize_bits - 9); - if (!udf_disk_stamp_to_time(&inode->i_atime, fe->accessTime)) - inode->i_atime = sbi->s_record_time; - - if (!udf_disk_stamp_to_time(&inode->i_mtime, - fe->modificationTime)) - inode->i_mtime = sbi->s_record_time; - - if (!udf_disk_stamp_to_time(&inode->i_ctime, fe->attrTime)) - inode->i_ctime = sbi->s_record_time; + udf_disk_stamp_to_time(&inode->i_atime, fe->accessTime); + udf_disk_stamp_to_time(&inode->i_mtime, fe->modificationTime); + udf_disk_stamp_to_time(&inode->i_ctime, fe->attrTime); iinfo->i_unique = le64_to_cpu(fe->uniqueID); iinfo->i_lenEAttr = le32_to_cpu(fe->lengthExtendedAttr); @@ -1489,18 +1483,10 @@ reread: inode->i_blocks = le64_to_cpu(efe->logicalBlocksRecorded) << (inode->i_sb->s_blocksize_bits - 9); - if (!udf_disk_stamp_to_time(&inode->i_atime, efe->accessTime)) - inode->i_atime = sbi->s_record_time; - - if (!udf_disk_stamp_to_time(&inode->i_mtime, - efe->modificationTime)) - inode->i_mtime = sbi->s_record_time; - - if (!udf_disk_stamp_to_time(&iinfo->i_crtime, efe->createTime)) - iinfo->i_crtime = sbi->s_record_time; - - if (!udf_disk_stamp_to_time(&inode->i_ctime, efe->attrTime)) - inode->i_ctime = sbi->s_record_time; + udf_disk_stamp_to_time(&inode->i_atime, efe->accessTime); + udf_disk_stamp_to_time(&inode->i_mtime, efe->modificationTime); + udf_disk_stamp_to_time(&iinfo->i_crtime, efe->createTime); + udf_disk_stamp_to_time(&inode->i_ctime, efe->attrTime); iinfo->i_unique = le64_to_cpu(efe->uniqueID); iinfo->i_lenEAttr = le32_to_cpu(efe->lengthExtendedAttr); diff --git a/fs/udf/super.c b/fs/udf/super.c index d961c47b5a03..e9afabc99d62 100644 --- a/fs/udf/super.c +++ b/fs/udf/super.c @@ -887,6 +887,9 @@ static int udf_load_pvoldesc(struct super_block *sb, sector_t block) struct buffer_head *bh; uint16_t ident; int ret = -ENOMEM; +#ifdef UDFFS_DEBUG + struct timestamp *ts; +#endif outstr = kmalloc(128, GFP_NOFS); if (!outstr) @@ -905,15 +908,15 @@ static int udf_load_pvoldesc(struct super_block *sb, sector_t block) pvoldesc = (struct primaryVolDesc *)bh->b_data; - if (udf_disk_stamp_to_time(&UDF_SB(sb)->s_record_time, - pvoldesc->recordingDateAndTime)) { + udf_disk_stamp_to_time(&UDF_SB(sb)->s_record_time, + pvoldesc->recordingDateAndTime); #ifdef UDFFS_DEBUG - struct timestamp *ts = &pvoldesc->recordingDateAndTime; - udf_debug("recording time %04u/%02u/%02u %02u:%02u (%x)\n", - le16_to_cpu(ts->year), ts->month, ts->day, ts->hour, - ts->minute, le16_to_cpu(ts->typeAndTimezone)); + ts = &pvoldesc->recordingDateAndTime; + udf_debug("recording time %04u/%02u/%02u %02u:%02u (%x)\n", + le16_to_cpu(ts->year), ts->month, ts->day, ts->hour, + ts->minute, le16_to_cpu(ts->typeAndTimezone)); #endif - } + ret = udf_dstrCS0toUTF8(outstr, 31, pvoldesc->volIdent, 32); if (ret < 0) { diff --git a/fs/udf/udfdecl.h b/fs/udf/udfdecl.h index 76ac3f8bc405..e61361f49403 100644 --- a/fs/udf/udfdecl.h +++ b/fs/udf/udfdecl.h @@ -244,8 +244,8 @@ extern struct long_ad *udf_get_filelongad(uint8_t *, int, uint32_t *, int); extern struct short_ad *udf_get_fileshortad(uint8_t *, int, uint32_t *, int); /* udftime.c */ -extern struct timespec *udf_disk_stamp_to_time(struct timespec *dest, +extern void udf_disk_stamp_to_time(struct timespec *dest, struct timestamp src); -extern struct timestamp *udf_time_to_disk_stamp(struct timestamp *dest, struct timespec src); +extern void udf_time_to_disk_stamp(struct timestamp *dest, struct timespec src); #endif /* __UDF_DECL_H */ diff --git a/fs/udf/udftime.c b/fs/udf/udftime.c index 14626b34d13e..8708b653c760 100644 --- a/fs/udf/udftime.c +++ b/fs/udf/udftime.c @@ -40,7 +40,7 @@ #include #include -struct timespec * +void udf_disk_stamp_to_time(struct timespec *dest, struct timestamp src) { u16 typeAndTimezone = le16_to_cpu(src.typeAndTimezone); @@ -60,12 +60,21 @@ udf_disk_stamp_to_time(struct timespec *dest, struct timestamp src) dest->tv_sec = mktime64(year, src.month, src.day, src.hour, src.minute, src.second); dest->tv_sec -= offset * 60; - dest->tv_nsec = 1000 * (src.centiseconds * 10000 + + + /* + * Sanitize nanosecond field since reportedly some filesystems are + * recorded with bogus sub-second values. + */ + if (src.centiseconds < 100 && src.hundredsOfMicroseconds < 100 && + src.microseconds < 100) { + dest->tv_nsec = 1000 * (src.centiseconds * 10000 + src.hundredsOfMicroseconds * 100 + src.microseconds); - return dest; + } else { + dest->tv_nsec = 0; + } } -struct timestamp * +void udf_time_to_disk_stamp(struct timestamp *dest, struct timespec ts) { long seconds; @@ -74,9 +83,6 @@ udf_time_to_disk_stamp(struct timestamp *dest, struct timespec ts) offset = -sys_tz.tz_minuteswest; - if (!dest) - return NULL; - dest->typeAndTimezone = cpu_to_le16(0x1000 | (offset & 0x0FFF)); seconds = ts.tv_sec + offset * 60; @@ -92,7 +98,6 @@ udf_time_to_disk_stamp(struct timestamp *dest, struct timespec ts) dest->centiseconds * 10000) / 100; dest->microseconds = (ts.tv_nsec / 1000 - dest->centiseconds * 10000 - dest->hundredsOfMicroseconds * 100); - return dest; } /* EOF */ diff --git a/include/linux/compat.h b/include/linux/compat.h index cec96d4794d0..3380faebda3f 100644 --- a/include/linux/compat.h +++ b/include/linux/compat.h @@ -563,7 +563,7 @@ asmlinkage long compat_sys_open_by_handle_at(int mountdirfd, struct file_handle __user *handle, int flags); asmlinkage long compat_sys_truncate(const char __user *, compat_off_t); -asmlinkage long compat_sys_ftruncate(unsigned int, compat_ulong_t); +asmlinkage long compat_sys_ftruncate(unsigned int, compat_off_t); asmlinkage long compat_sys_pselect6(int n, compat_ulong_t __user *inp, compat_ulong_t __user *outp, compat_ulong_t __user *exp, diff --git a/include/linux/nvme.h b/include/linux/nvme.h index 9310ce77d8e1..5812e2abf659 100644 --- a/include/linux/nvme.h +++ b/include/linux/nvme.h @@ -71,8 +71,8 @@ enum { NVMF_RDMA_QPTYPE_DATAGRAM = 2, /* Reliable Datagram */ }; -/* RDMA QP Service Type codes for Discovery Log Page entry TSAS - * RDMA_QPTYPE field +/* RDMA Provider Type codes for Discovery Log Page entry TSAS + * RDMA_PRTYPE field */ enum { NVMF_RDMA_PRTYPE_NOT_SPECIFIED = 1, /* No Provider Specified */ diff --git a/include/linux/pci.h b/include/linux/pci.h index 3d5db4f53636..f03a05a026f6 100644 --- a/include/linux/pci.h +++ b/include/linux/pci.h @@ -125,6 +125,15 @@ enum pci_interrupt_pin { /* The number of legacy PCI INTx interrupts */ #define PCI_NUM_INTX 4 +/* + * Reading from a device that doesn't respond typically returns ~0. A + * successful read from a device may also return ~0, so you need additional + * information to reliably identify errors. + */ +#define PCI_ERROR_RESPONSE (~0ULL) +#define PCI_SET_ERROR_RESPONSE(val) (*(val) = ((typeof(*(val))) PCI_ERROR_RESPONSE)) +#define PCI_POSSIBLE_ERROR(val) ((val) == ((typeof(val)) PCI_ERROR_RESPONSE)) + /* * pci_power_t values must match the bits in the Capabilities PME_Support * and Control/Status PowerState fields in the Power Management capability. diff --git a/include/linux/sunrpc/clnt.h b/include/linux/sunrpc/clnt.h index 166fc4e76df6..b324adc24bee 100644 --- a/include/linux/sunrpc/clnt.h +++ b/include/linux/sunrpc/clnt.h @@ -70,6 +70,7 @@ struct rpc_clnt { struct dentry *cl_debugfs; /* debugfs directory */ #endif struct rpc_xprt_iter cl_xpi; + struct super_block *pipefs_sb; }; /* diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 7454828397d1..cd52f02b4ad2 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h @@ -426,7 +426,7 @@ asmlinkage long sys_mount(char __user *dev_name, char __user *dir_name, asmlinkage long sys_umount(char __user *name, int flags); asmlinkage long sys_oldumount(char __user *name); asmlinkage long sys_truncate(const char __user *path, long length); -asmlinkage long sys_ftruncate(unsigned int fd, unsigned long length); +asmlinkage long sys_ftruncate(unsigned int fd, off_t length); asmlinkage long sys_stat(const char __user *filename, struct __old_kernel_stat __user *statbuf); asmlinkage long sys_statfs(const char __user * path, diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index bac3d79139b2..71f6311b09a8 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h @@ -1395,18 +1395,46 @@ static inline int hci_check_conn_params(u16 min, u16 max, u16 latency, { u16 max_latency; - if (min > max || min < 6 || max > 3200) + if (min > max) { + BT_WARN("min %d > max %d", min, max); return -EINVAL; + } - if (to_multiplier < 10 || to_multiplier > 3200) + if (min < 6) { + BT_WARN("min %d < 6", min); return -EINVAL; + } - if (max >= to_multiplier * 8) + if (max > 3200) { + BT_WARN("max %d > 3200", max); return -EINVAL; + } + + if (to_multiplier < 10) { + BT_WARN("to_multiplier %d < 10", to_multiplier); + return -EINVAL; + } + + if (to_multiplier > 3200) { + BT_WARN("to_multiplier %d > 3200", to_multiplier); + return -EINVAL; + } + + if (max >= to_multiplier * 8) { + BT_WARN("max %d >= to_multiplier %d * 8", max, to_multiplier); + return -EINVAL; + } max_latency = (to_multiplier * 4 / max) - 1; - if (latency > 499 || latency > max_latency) + if (latency > 499) { + BT_WARN("latency %d > 499", latency); return -EINVAL; + } + + if (latency > max_latency) { + BT_WARN("latency %d > max_latency %d", latency, max_latency); + return -EINVAL; + } return 0; } diff --git a/include/net/netfilter/nf_tables.h b/include/net/netfilter/nf_tables.h index 55c5717e0857..b94bd16796a7 100644 --- a/include/net/netfilter/nf_tables.h +++ b/include/net/netfilter/nf_tables.h @@ -443,6 +443,11 @@ static inline void *nft_set_priv(const struct nft_set *set) return (void *)set->data; } +static inline enum nft_data_types nft_set_datatype(const struct nft_set *set) +{ + return set->dtype == NFT_DATA_VERDICT ? NFT_DATA_VERDICT : NFT_DATA_VALUE; +} + static inline struct nft_set *nft_set_container_of(const void *priv) { return (void *)priv - offsetof(struct nft_set, data); diff --git a/include/uapi/asm-generic/hugetlb_encode.h b/include/uapi/asm-generic/hugetlb_encode.h index e4732d3c2998..14a3aacfca4a 100644 --- a/include/uapi/asm-generic/hugetlb_encode.h +++ b/include/uapi/asm-generic/hugetlb_encode.h @@ -20,15 +20,17 @@ #define HUGETLB_FLAG_ENCODE_SHIFT 26 #define HUGETLB_FLAG_ENCODE_MASK 0x3f -#define HUGETLB_FLAG_ENCODE_64KB (16 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_512KB (19 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_1MB (20 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_2MB (21 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_8MB (23 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_16MB (24 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_256MB (28 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_1GB (30 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_2GB (31 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_16GB (34 << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_64KB (16U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_512KB (19U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_1MB (20U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_2MB (21U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_8MB (23U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_16MB (24U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_32MB (25U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_256MB (28U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_512MB (29U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_1GB (30U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_2GB (31U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_16GB (34U << HUGETLB_FLAG_ENCODE_SHIFT) #endif /* _ASM_GENERIC_HUGETLB_ENCODE_H_ */ diff --git a/include/uapi/linux/memfd.h b/include/uapi/linux/memfd.h index 015a4c0bbb47..7a8a26751c23 100644 --- a/include/uapi/linux/memfd.h +++ b/include/uapi/linux/memfd.h @@ -25,7 +25,9 @@ #define MFD_HUGE_2MB HUGETLB_FLAG_ENCODE_2MB #define MFD_HUGE_8MB HUGETLB_FLAG_ENCODE_8MB #define MFD_HUGE_16MB HUGETLB_FLAG_ENCODE_16MB +#define MFD_HUGE_32MB HUGETLB_FLAG_ENCODE_32MB #define MFD_HUGE_256MB HUGETLB_FLAG_ENCODE_256MB +#define MFD_HUGE_512MB HUGETLB_FLAG_ENCODE_512MB #define MFD_HUGE_1GB HUGETLB_FLAG_ENCODE_1GB #define MFD_HUGE_2GB HUGETLB_FLAG_ENCODE_2GB #define MFD_HUGE_16GB HUGETLB_FLAG_ENCODE_16GB diff --git a/include/uapi/linux/mman.h b/include/uapi/linux/mman.h index bfd5938fede6..d0f515d53299 100644 --- a/include/uapi/linux/mman.h +++ b/include/uapi/linux/mman.h @@ -28,7 +28,9 @@ #define MAP_HUGE_2MB HUGETLB_FLAG_ENCODE_2MB #define MAP_HUGE_8MB HUGETLB_FLAG_ENCODE_8MB #define MAP_HUGE_16MB HUGETLB_FLAG_ENCODE_16MB +#define MAP_HUGE_32MB HUGETLB_FLAG_ENCODE_32MB #define MAP_HUGE_256MB HUGETLB_FLAG_ENCODE_256MB +#define MAP_HUGE_512MB HUGETLB_FLAG_ENCODE_512MB #define MAP_HUGE_1GB HUGETLB_FLAG_ENCODE_1GB #define MAP_HUGE_2GB HUGETLB_FLAG_ENCODE_2GB #define MAP_HUGE_16GB HUGETLB_FLAG_ENCODE_16GB diff --git a/include/uapi/linux/shm.h b/include/uapi/linux/shm.h index 4de12a39b075..7c4ab1e6b49e 100644 --- a/include/uapi/linux/shm.h +++ b/include/uapi/linux/shm.h @@ -65,7 +65,9 @@ struct shmid_ds { #define SHM_HUGE_2MB HUGETLB_FLAG_ENCODE_2MB #define SHM_HUGE_8MB HUGETLB_FLAG_ENCODE_8MB #define SHM_HUGE_16MB HUGETLB_FLAG_ENCODE_16MB +#define SHM_HUGE_32MB HUGETLB_FLAG_ENCODE_32MB #define SHM_HUGE_256MB HUGETLB_FLAG_ENCODE_256MB +#define SHM_HUGE_512MB HUGETLB_FLAG_ENCODE_512MB #define SHM_HUGE_1GB HUGETLB_FLAG_ENCODE_1GB #define SHM_HUGE_2GB HUGETLB_FLAG_ENCODE_2GB #define SHM_HUGE_16GB HUGETLB_FLAG_ENCODE_16GB diff --git a/kernel/gcov/gcc_4_7.c b/kernel/gcov/gcc_4_7.c index 0f8a7af5d591..88e128c1221b 100644 --- a/kernel/gcov/gcc_4_7.c +++ b/kernel/gcov/gcc_4_7.c @@ -19,7 +19,9 @@ #include #include "gcov.h" -#if (__GNUC__ >= 10) +#if (__GNUC__ >= 14) +#define GCOV_COUNTERS 9 +#elif (__GNUC__ >= 10) #define GCOV_COUNTERS 8 #elif (__GNUC__ >= 7) #define GCOV_COUNTERS 9 diff --git a/kernel/rcu/rcutorture.c b/kernel/rcu/rcutorture.c index 501d8754a620..44e077dac0a3 100644 --- a/kernel/rcu/rcutorture.c +++ b/kernel/rcu/rcutorture.c @@ -1304,7 +1304,8 @@ static bool rcu_torture_one_read(struct torture_random_state *trsp) preempt_disable(); pipe_count = p->rtort_pipe_count; if (pipe_count > RCU_TORTURE_PIPE_LEN) { - /* Should not happen, but... */ + // Should not happen in a correct RCU implementation, + // happens quite often for torture_type=busted. pipe_count = RCU_TORTURE_PIPE_LEN; } completed = cur_ops->get_gp_seq(); diff --git a/net/batman-adv/bat_iv_ogm.c b/net/batman-adv/bat_iv_ogm.c index 3ec16c48e768..984f9876811a 100644 --- a/net/batman-adv/bat_iv_ogm.c +++ b/net/batman-adv/bat_iv_ogm.c @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/bat_v_elp.c b/net/batman-adv/bat_v_elp.c index 58e8470b160e..ffb68f0319cf 100644 --- a/net/batman-adv/bat_v_elp.c +++ b/net/batman-adv/bat_v_elp.c @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/bat_v_ogm.c b/net/batman-adv/bat_v_ogm.c index fc5a9e1968e8..efbf19c6d627 100644 --- a/net/batman-adv/bat_v_ogm.c +++ b/net/batman-adv/bat_v_ogm.c @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/bridge_loop_avoidance.c b/net/batman-adv/bridge_loop_avoidance.c index 89afb90458f4..f7fb02ce8005 100644 --- a/net/batman-adv/bridge_loop_avoidance.c +++ b/net/batman-adv/bridge_loop_avoidance.c @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/distributed-arp-table.c b/net/batman-adv/distributed-arp-table.c index 8e838b6647e4..ef7ab8b707d8 100644 --- a/net/batman-adv/distributed-arp-table.c +++ b/net/batman-adv/distributed-arp-table.c @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c index a50c87329bc5..aec26167a00b 100644 --- a/net/batman-adv/fragmentation.c +++ b/net/batman-adv/fragmentation.c @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/gateway_client.c b/net/batman-adv/gateway_client.c index 056af2eec4a2..167b53fb87b9 100644 --- a/net/batman-adv/gateway_client.c +++ b/net/batman-adv/gateway_client.c @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/hard-interface.c b/net/batman-adv/hard-interface.c index f104002e1052..3aaa0411100b 100644 --- a/net/batman-adv/hard-interface.c +++ b/net/batman-adv/hard-interface.c @@ -21,7 +21,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/hash.c b/net/batman-adv/hash.c index b5f7e13918ac..f7dd7402e14c 100644 --- a/net/batman-adv/hash.c +++ b/net/batman-adv/hash.c @@ -18,7 +18,7 @@ #include "hash.h" #include "main.h" -#include +#include #include #include diff --git a/net/batman-adv/icmp_socket.c b/net/batman-adv/icmp_socket.c index 8ead292886d1..1f57e6ec1fda 100644 --- a/net/batman-adv/icmp_socket.c +++ b/net/batman-adv/icmp_socket.c @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include diff --git a/net/batman-adv/log.c b/net/batman-adv/log.c index b61ce96ae1d3..d4056c588be9 100644 --- a/net/batman-adv/log.c +++ b/net/batman-adv/log.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include #include diff --git a/net/batman-adv/main.c b/net/batman-adv/main.c index c93a75f70f01..3867739f5531 100644 --- a/net/batman-adv/main.c +++ b/net/batman-adv/main.c @@ -22,8 +22,8 @@ #include #include #include -#include #include +#include #include #include #include diff --git a/net/batman-adv/multicast.c b/net/batman-adv/multicast.c index fc62f325f9ec..56c6d9a07ae5 100644 --- a/net/batman-adv/multicast.c +++ b/net/batman-adv/multicast.c @@ -24,7 +24,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/netlink.c b/net/batman-adv/netlink.c index edb35bcc046d..af053a897156 100644 --- a/net/batman-adv/netlink.c +++ b/net/batman-adv/netlink.c @@ -23,8 +23,8 @@ #include #include #include -#include #include +#include #include #include #include diff --git a/net/batman-adv/network-coding.c b/net/batman-adv/network-coding.c index 400e31ace4d0..9b8fff4d12e9 100644 --- a/net/batman-adv/network-coding.c +++ b/net/batman-adv/network-coding.c @@ -25,7 +25,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/originator.c b/net/batman-adv/originator.c index 653eaadcfefb..400253d1853b 100644 --- a/net/batman-adv/originator.c +++ b/net/batman-adv/originator.c @@ -21,7 +21,8 @@ #include #include #include -#include +#include +#include #include #include #include @@ -103,6 +104,29 @@ batadv_orig_node_vlan_get(struct batadv_orig_node *orig_node, return vlan; } +/** + * batadv_vlan_id_valid() - check if vlan id is in valid batman-adv encoding + * @vid: the VLAN identifier + * + * Return: true when either no vlan is set or if VLAN is in correct range, + * false otherwise + */ +static bool batadv_vlan_id_valid(unsigned short vid) +{ + unsigned short non_vlan = vid & ~(BATADV_VLAN_HAS_TAG | VLAN_VID_MASK); + + if (vid == 0) + return true; + + if (!(vid & BATADV_VLAN_HAS_TAG)) + return false; + + if (non_vlan) + return false; + + return true; +} + /** * batadv_orig_node_vlan_new - search and possibly create an orig_node_vlan * object @@ -121,6 +145,9 @@ batadv_orig_node_vlan_new(struct batadv_orig_node *orig_node, { struct batadv_orig_node_vlan *vlan; + if (!batadv_vlan_id_valid(vid)) + return NULL; + spin_lock_bh(&orig_node->vlan_list_lock); /* first look if an object for this vid already exists */ @@ -1304,6 +1331,8 @@ static void _batadv_purge_orig(struct batadv_priv *bat_priv) /* for all origins... */ for (i = 0; i < hash->size; i++) { head = &hash->table[i]; + if (hlist_empty(head)) + continue; list_lock = &hash->list_locks[i]; spin_lock_bh(list_lock); diff --git a/net/batman-adv/send.c b/net/batman-adv/send.c index 054a65e6eb68..0580a3c918b8 100644 --- a/net/batman-adv/send.c +++ b/net/batman-adv/send.c @@ -23,7 +23,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/soft-interface.c b/net/batman-adv/soft-interface.c index 7a04ac96b121..ef84ec3f646f 100644 --- a/net/batman-adv/soft-interface.c +++ b/net/batman-adv/soft-interface.c @@ -26,7 +26,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/sysfs.c b/net/batman-adv/sysfs.c index ed789845d195..54a627294821 100644 --- a/net/batman-adv/sysfs.c +++ b/net/batman-adv/sysfs.c @@ -22,7 +22,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/tp_meter.c b/net/batman-adv/tp_meter.c index bfe8effe9238..92333e855c68 100644 --- a/net/batman-adv/tp_meter.c +++ b/net/batman-adv/tp_meter.c @@ -25,7 +25,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/translation-table.c b/net/batman-adv/translation-table.c index 70b7c65b611b..e9c7685e872a 100644 --- a/net/batman-adv/translation-table.c +++ b/net/batman-adv/translation-table.c @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/net/batman-adv/tvlv.c b/net/batman-adv/tvlv.c index d6d6d95e48aa..5448781a9565 100644 --- a/net/batman-adv/tvlv.c +++ b/net/batman-adv/tvlv.c @@ -19,7 +19,7 @@ #include #include -#include +#include #include #include #include diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c index b36d2e455f28..4886a37a4811 100644 --- a/net/bluetooth/l2cap_core.c +++ b/net/bluetooth/l2cap_core.c @@ -5316,13 +5316,7 @@ static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn, memset(&rsp, 0, sizeof(rsp)); - if (max > hcon->le_conn_max_interval) { - BT_DBG("requested connection interval exceeds current bounds."); - err = -EINVAL; - } else { - err = hci_check_conn_params(min, max, latency, to_multiplier); - } - + err = hci_check_conn_params(min, max, latency, to_multiplier); if (err) rsp.result = cpu_to_le16(L2CAP_CONN_PARAM_REJECTED); else diff --git a/net/core/sock.c b/net/core/sock.c index a94399cf61de..675e602cfb5f 100644 --- a/net/core/sock.c +++ b/net/core/sock.c @@ -2986,7 +2986,8 @@ int sock_common_getsockopt(struct socket *sock, int level, int optname, { struct sock *sk = sock->sk; - return sk->sk_prot->getsockopt(sk, level, optname, optval, optlen); + /* IPV6_ADDRFORM can change sk->sk_prot under us. */ + return READ_ONCE(sk->sk_prot)->getsockopt(sk, level, optname, optval, optlen); } EXPORT_SYMBOL(sock_common_getsockopt); @@ -3027,7 +3028,8 @@ int sock_common_setsockopt(struct socket *sock, int level, int optname, { struct sock *sk = sock->sk; - return sk->sk_prot->setsockopt(sk, level, optname, optval, optlen); + /* IPV6_ADDRFORM can change sk->sk_prot under us. */ + return READ_ONCE(sk->sk_prot)->setsockopt(sk, level, optname, optval, optlen); } EXPORT_SYMBOL(sock_common_setsockopt); diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index 4874407526e1..c4ae1f11739b 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -529,15 +529,20 @@ int inet_dgram_connect(struct socket *sock, struct sockaddr *uaddr, int addr_len, int flags) { struct sock *sk = sock->sk; + const struct proto *prot; if (addr_len < sizeof(uaddr->sa_family)) return -EINVAL; + + /* IPV6_ADDRFORM can change sk->sk_prot under us. */ + prot = READ_ONCE(sk->sk_prot); + if (uaddr->sa_family == AF_UNSPEC) - return sk->sk_prot->disconnect(sk, flags); + return prot->disconnect(sk, flags); if (!inet_sk(sk)->inet_num && inet_autobind(sk)) return -EAGAIN; - return sk->sk_prot->connect(sk, uaddr, addr_len); + return prot->connect(sk, uaddr, addr_len); } EXPORT_SYMBOL(inet_dgram_connect); @@ -692,10 +697,11 @@ EXPORT_SYMBOL(inet_stream_connect); int inet_accept(struct socket *sock, struct socket *newsock, int flags, bool kern) { - struct sock *sk1 = sock->sk; + struct sock *sk1 = sock->sk, *sk2; int err = -EINVAL; - struct sock *sk2 = sk1->sk_prot->accept(sk1, flags, &err, kern); + /* IPV6_ADDRFORM can change sk->sk_prot under us. */ + sk2 = READ_ONCE(sk1->sk_prot)->accept(sk1, flags, &err, kern); if (!sk2) goto do_err; @@ -751,15 +757,19 @@ EXPORT_SYMBOL(inet_getname); int inet_sendmsg(struct socket *sock, struct msghdr *msg, size_t size) { struct sock *sk = sock->sk; + const struct proto *prot; sock_rps_record_flow(sk); + /* IPV6_ADDRFORM can change sk->sk_prot under us. */ + prot = READ_ONCE(sk->sk_prot); + /* We may need to bind the socket. */ - if (!inet_sk(sk)->inet_num && !sk->sk_prot->no_autobind && + if (!inet_sk(sk)->inet_num && !prot->no_autobind && inet_autobind(sk)) return -EAGAIN; - return sk->sk_prot->sendmsg(sk, msg, size); + return prot->sendmsg(sk, msg, size); } EXPORT_SYMBOL(inet_sendmsg); @@ -767,6 +777,7 @@ ssize_t inet_sendpage(struct socket *sock, struct page *page, int offset, size_t size, int flags) { struct sock *sk = sock->sk; + const struct proto *prot; sock_rps_record_flow(sk); @@ -775,8 +786,10 @@ ssize_t inet_sendpage(struct socket *sock, struct page *page, int offset, inet_autobind(sk)) return -EAGAIN; - if (sk->sk_prot->sendpage) - return sk->sk_prot->sendpage(sk, page, offset, size, flags); + /* IPV6_ADDRFORM can change sk->sk_prot under us. */ + prot = READ_ONCE(sk->sk_prot); + if (prot->sendpage) + return prot->sendpage(sk, page, offset, size, flags); return sock_no_sendpage(sock, page, offset, size, flags); } EXPORT_SYMBOL(inet_sendpage); @@ -785,13 +798,16 @@ int inet_recvmsg(struct socket *sock, struct msghdr *msg, size_t size, int flags) { struct sock *sk = sock->sk; + const struct proto *prot; int addr_len = 0; int err; sock_rps_record_flow(sk); - err = sk->sk_prot->recvmsg(sk, msg, size, flags & MSG_DONTWAIT, - flags & ~MSG_DONTWAIT, &addr_len); + /* IPV6_ADDRFORM can change sk->sk_prot under us. */ + prot = READ_ONCE(sk->sk_prot); + err = prot->recvmsg(sk, msg, size, flags & MSG_DONTWAIT, + flags & ~MSG_DONTWAIT, &addr_len); if (err >= 0) msg->msg_namelen = addr_len; return err; diff --git a/net/ipv4/cipso_ipv4.c b/net/ipv4/cipso_ipv4.c index 8dcf9aec7b77..4a86cf05a348 100644 --- a/net/ipv4/cipso_ipv4.c +++ b/net/ipv4/cipso_ipv4.c @@ -2029,12 +2029,16 @@ static int cipso_v4_delopt(struct ip_options_rcu __rcu **opt_ptr) * from there we can determine the new total option length */ iter = 0; optlen_new = 0; - while (iter < opt->opt.optlen) - if (opt->opt.__data[iter] != IPOPT_NOP) { + while (iter < opt->opt.optlen) { + if (opt->opt.__data[iter] == IPOPT_END) { + break; + } else if (opt->opt.__data[iter] == IPOPT_NOP) { + iter++; + } else { iter += opt->opt.__data[iter + 1]; optlen_new = iter; - } else - iter++; + } + } hdr_delta = opt->opt.optlen; opt->opt.optlen = (optlen_new + 3) & ~3; hdr_delta -= opt->opt.optlen; diff --git a/net/ipv4/tcp.c b/net/ipv4/tcp.c index 26b932699286..04b3a76f07fe 100644 --- a/net/ipv4/tcp.c +++ b/net/ipv4/tcp.c @@ -2079,6 +2079,10 @@ void tcp_set_state(struct sock *sk, int state) if (oldstate != TCP_ESTABLISHED) TCP_INC_STATS(sock_net(sk), TCP_MIB_CURRESTAB); break; + case TCP_CLOSE_WAIT: + if (oldstate == TCP_SYN_RECV) + TCP_INC_STATS(sock_net(sk), TCP_MIB_CURRESTAB); + break; case TCP_CLOSE: if (oldstate == TCP_CLOSE_WAIT || oldstate == TCP_ESTABLISHED) @@ -2090,7 +2094,7 @@ void tcp_set_state(struct sock *sk, int state) inet_put_port(sk); /* fall through */ default: - if (oldstate == TCP_ESTABLISHED) + if (oldstate == TCP_ESTABLISHED || oldstate == TCP_CLOSE_WAIT) TCP_DEC_STATS(sock_net(sk), TCP_MIB_CURRESTAB); } @@ -2872,8 +2876,9 @@ int tcp_setsockopt(struct sock *sk, int level, int optname, char __user *optval, const struct inet_connection_sock *icsk = inet_csk(sk); if (level != SOL_TCP) - return icsk->icsk_af_ops->setsockopt(sk, level, optname, - optval, optlen); + /* Paired with WRITE_ONCE() in do_ipv6_setsockopt() and tcp_v6_connect() */ + return READ_ONCE(icsk->icsk_af_ops)->setsockopt(sk, level, optname, + optval, optlen); return do_tcp_setsockopt(sk, level, optname, optval, optlen); } EXPORT_SYMBOL(tcp_setsockopt); @@ -3305,8 +3310,9 @@ int tcp_getsockopt(struct sock *sk, int level, int optname, char __user *optval, struct inet_connection_sock *icsk = inet_csk(sk); if (level != SOL_TCP) - return icsk->icsk_af_ops->getsockopt(sk, level, optname, - optval, optlen); + /* Paired with WRITE_ONCE() in do_ipv6_setsockopt() and tcp_v6_connect() */ + return READ_ONCE(icsk->icsk_af_ops)->getsockopt(sk, level, optname, + optval, optlen); return do_tcp_getsockopt(sk, level, optname, optval, optlen); } EXPORT_SYMBOL(tcp_getsockopt); diff --git a/net/ipv4/tcp_output.c b/net/ipv4/tcp_output.c index eb4dd79a6094..c5465b61f940 100644 --- a/net/ipv4/tcp_output.c +++ b/net/ipv4/tcp_output.c @@ -3115,6 +3115,7 @@ void tcp_send_fin(struct sock *sk) * as TCP stack thinks it has already been transmitted. */ if (tskb && (tcp_send_head(sk) || tcp_under_memory_pressure(sk))) { +coalesce: TCP_SKB_CB(tskb)->tcp_flags |= TCPHDR_FIN; TCP_SKB_CB(tskb)->end_seq++; tp->write_seq++; @@ -3132,9 +3133,11 @@ void tcp_send_fin(struct sock *sk) skb = alloc_skb_fclone(MAX_TCP_HEADER, sk_gfp_mask(sk, GFP_ATOMIC | __GFP_NOWARN)); - if (unlikely(!skb)) + if (unlikely(!skb)) { + if (tskb) + goto coalesce; return; - + } skb_reserve(skb, MAX_TCP_HEADER); sk_forced_mem_schedule(sk, skb->truesize); /* FIN eats a sequence byte, write_seq advanced by tcp_queue_skb(). */ diff --git a/net/ipv6/af_inet6.c b/net/ipv6/af_inet6.c index 1766c7771282..a879bd1d634d 100644 --- a/net/ipv6/af_inet6.c +++ b/net/ipv6/af_inet6.c @@ -285,6 +285,7 @@ int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) { struct sockaddr_in6 *addr = (struct sockaddr_in6 *)uaddr; struct sock *sk = sock->sk; + const struct proto *prot; struct inet_sock *inet = inet_sk(sk); struct ipv6_pinfo *np = inet6_sk(sk); struct net *net = sock_net(sk); @@ -294,9 +295,11 @@ int inet6_bind(struct socket *sock, struct sockaddr *uaddr, int addr_len) int addr_type = 0; int err = 0; + /* IPV6_ADDRFORM can change sk->sk_prot under us. */ + prot = READ_ONCE(sk->sk_prot); /* If the socket has its own bind function then use it. */ - if (sk->sk_prot->bind) - return sk->sk_prot->bind(sk, uaddr, addr_len); + if (prot->bind) + return prot->bind(sk, uaddr, addr_len); if (addr_len < SIN6_LEN_RFC2133) return -EINVAL; @@ -534,6 +537,7 @@ int inet6_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) { struct sock *sk = sock->sk; struct net *net = sock_net(sk); + const struct proto *prot; switch (cmd) { case SIOCGSTAMP: @@ -554,9 +558,11 @@ int inet6_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg) case SIOCSIFDSTADDR: return addrconf_set_dstaddr(net, (void __user *) arg); default: - if (!sk->sk_prot->ioctl) + /* IPV6_ADDRFORM can change sk->sk_prot under us. */ + prot = READ_ONCE(sk->sk_prot); + if (!prot->ioctl) return -ENOIOCTLCMD; - return sk->sk_prot->ioctl(sk, cmd, arg); + return prot->ioctl(sk, cmd, arg); } /*NOTREACHED*/ return 0; diff --git a/net/ipv6/ipv6_sockglue.c b/net/ipv6/ipv6_sockglue.c index 434a277fb628..2c9657c205ae 100644 --- a/net/ipv6/ipv6_sockglue.c +++ b/net/ipv6/ipv6_sockglue.c @@ -224,8 +224,10 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname, sock_prot_inuse_add(net, sk->sk_prot, -1); sock_prot_inuse_add(net, &tcp_prot, 1); local_bh_enable(); - sk->sk_prot = &tcp_prot; - icsk->icsk_af_ops = &ipv4_specific; + /* Paired with READ_ONCE(sk->sk_prot) in inet6_stream_ops */ + WRITE_ONCE(sk->sk_prot, &tcp_prot); + /* Paired with READ_ONCE() in tcp_(get|set)sockopt() */ + WRITE_ONCE(icsk->icsk_af_ops, &ipv4_specific); sk->sk_socket->ops = &inet_stream_ops; sk->sk_family = PF_INET; tcp_sync_mss(sk, icsk->icsk_pmtu_cookie); @@ -238,7 +240,8 @@ static int do_ipv6_setsockopt(struct sock *sk, int level, int optname, sock_prot_inuse_add(net, sk->sk_prot, -1); sock_prot_inuse_add(net, prot, 1); local_bh_enable(); - sk->sk_prot = prot; + /* Paired with READ_ONCE(sk->sk_prot) in inet6_dgram_ops */ + WRITE_ONCE(sk->sk_prot, prot); sk->sk_socket->ops = &inet_dgram_ops; sk->sk_family = PF_INET; } diff --git a/net/ipv6/route.c b/net/ipv6/route.c index fadc94462e8d..69288fc80a02 100644 --- a/net/ipv6/route.c +++ b/net/ipv6/route.c @@ -3903,12 +3903,16 @@ int ipv6_sysctl_rtcache_flush(struct ctl_table *ctl, int write, { struct net *net; int delay; + int ret; if (!write) return -EINVAL; + ret = proc_dointvec(ctl, write, buffer, lenp, ppos); + if (ret) + return ret; + net = (struct net *)ctl->extra1; delay = net->ipv6.sysctl.flush_delay; - proc_dointvec(ctl, write, buffer, lenp, ppos); fib6_run_gc(delay <= 0 ? 0 : (unsigned long)delay, net, delay > 0); return 0; } diff --git a/net/ipv6/seg6_iptunnel.c b/net/ipv6/seg6_iptunnel.c index 3f43a4688602..205e0a3c0146 100644 --- a/net/ipv6/seg6_iptunnel.c +++ b/net/ipv6/seg6_iptunnel.c @@ -293,9 +293,8 @@ static int seg6_input(struct sk_buff *skb) slwt = seg6_lwt_lwtunnel(orig_dst->lwtstate); - preempt_disable(); + local_bh_disable(); dst = dst_cache_get(&slwt->cache); - preempt_enable(); skb_dst_drop(skb); @@ -303,14 +302,13 @@ static int seg6_input(struct sk_buff *skb) ip6_route_input(skb); dst = skb_dst(skb); if (!dst->error) { - preempt_disable(); dst_cache_set_ip6(&slwt->cache, dst, &ipv6_hdr(skb)->saddr); - preempt_enable(); } } else { skb_dst_set(skb, dst); } + local_bh_enable(); err = skb_cow_head(skb, LL_RESERVED_SPACE(dst->dev)); if (unlikely(err)) @@ -332,9 +330,9 @@ static int seg6_output(struct net *net, struct sock *sk, struct sk_buff *skb) slwt = seg6_lwt_lwtunnel(orig_dst->lwtstate); - preempt_disable(); + local_bh_disable(); dst = dst_cache_get(&slwt->cache); - preempt_enable(); + local_bh_enable(); if (unlikely(!dst)) { struct ipv6hdr *hdr = ipv6_hdr(skb); @@ -354,9 +352,9 @@ static int seg6_output(struct net *net, struct sock *sk, struct sk_buff *skb) goto drop; } - preempt_disable(); + local_bh_disable(); dst_cache_set_ip6(&slwt->cache, dst, &fl6.saddr); - preempt_enable(); + local_bh_enable(); } skb_dst_drop(skb); diff --git a/net/ipv6/tcp_ipv6.c b/net/ipv6/tcp_ipv6.c index 5d81861b8354..109823cb2b34 100644 --- a/net/ipv6/tcp_ipv6.c +++ b/net/ipv6/tcp_ipv6.c @@ -213,7 +213,8 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr, sin.sin_port = usin->sin6_port; sin.sin_addr.s_addr = usin->sin6_addr.s6_addr32[3]; - icsk->icsk_af_ops = &ipv6_mapped; + /* Paired with READ_ONCE() in tcp_(get|set)sockopt() */ + WRITE_ONCE(icsk->icsk_af_ops, &ipv6_mapped); sk->sk_backlog_rcv = tcp_v4_do_rcv; #ifdef CONFIG_TCP_MD5SIG tp->af_specific = &tcp_sock_ipv6_mapped_specific; @@ -223,7 +224,8 @@ static int tcp_v6_connect(struct sock *sk, struct sockaddr *uaddr, if (err) { icsk->icsk_ext_hdr_len = exthdrlen; - icsk->icsk_af_ops = &ipv6_specific; + /* Paired with READ_ONCE() in tcp_(get|set)sockopt() */ + WRITE_ONCE(icsk->icsk_af_ops, &ipv6_specific); sk->sk_backlog_rcv = tcp_v6_do_rcv; #ifdef CONFIG_TCP_MD5SIG tp->af_specific = &tcp_sock_ipv6_specific; @@ -1151,7 +1153,6 @@ static struct sock *tcp_v6_syn_recv_sock(const struct sock *sk, struct sk_buff * */ newsk->sk_gso_type = SKB_GSO_TCPV6; - ip6_dst_store(newsk, dst, NULL, NULL); inet6_sk_rx_dst_set(newsk, skb); newtcp6sk = (struct tcp6_sock *)newsk; @@ -1163,6 +1164,8 @@ static struct sock *tcp_v6_syn_recv_sock(const struct sock *sk, struct sk_buff * memcpy(newnp, np, sizeof(struct ipv6_pinfo)); + ip6_dst_store(newsk, dst, NULL, NULL); + newsk->sk_v6_daddr = ireq->ir_v6_rmt_addr; newnp->saddr = ireq->ir_v6_loc_addr; newsk->sk_v6_rcv_saddr = ireq->ir_v6_loc_addr; diff --git a/net/ipv6/xfrm6_policy.c b/net/ipv6/xfrm6_policy.c index 44d616d0bd00..3e4aa4def9f8 100644 --- a/net/ipv6/xfrm6_policy.c +++ b/net/ipv6/xfrm6_policy.c @@ -60,12 +60,18 @@ static int xfrm6_get_saddr(struct net *net, int oif, { struct dst_entry *dst; struct net_device *dev; + struct inet6_dev *idev; dst = xfrm6_dst_lookup(net, 0, oif, NULL, daddr, mark); if (IS_ERR(dst)) return -EHOSTUNREACH; - dev = ip6_dst_idev(dst)->dev; + idev = ip6_dst_idev(dst); + if (!idev) { + dst_release(dst); + return -EHOSTUNREACH; + } + dev = idev->dev; ipv6_dev_get_saddr(dev_net(dev), dev, &daddr->in6, 0, &saddr->in6); dst_release(dst); return 0; diff --git a/net/iucv/iucv.c b/net/iucv/iucv.c index 7d670ec17a7e..ae76f1aa1104 100644 --- a/net/iucv/iucv.c +++ b/net/iucv/iucv.c @@ -578,7 +578,7 @@ static void iucv_setmask_mp(void) */ static void iucv_setmask_up(void) { - cpumask_t cpumask; + static cpumask_t cpumask; int cpu; /* Disable all cpu but the first in cpu_irq_cpumask. */ @@ -686,23 +686,33 @@ static int iucv_cpu_online(unsigned int cpu) static int iucv_cpu_down_prep(unsigned int cpu) { - cpumask_t cpumask; + cpumask_var_t cpumask; + int ret = 0; if (!iucv_path_table) return 0; - cpumask_copy(&cpumask, &iucv_buffer_cpumask); - cpumask_clear_cpu(cpu, &cpumask); - if (cpumask_empty(&cpumask)) + if (!alloc_cpumask_var(&cpumask, GFP_KERNEL)) + return -ENOMEM; + + cpumask_copy(cpumask, &iucv_buffer_cpumask); + cpumask_clear_cpu(cpu, cpumask); + if (cpumask_empty(cpumask)) { /* Can't offline last IUCV enabled cpu. */ - return -EINVAL; + ret = -EINVAL; + goto __free_cpumask; + } iucv_retrieve_cpu(NULL); if (!cpumask_empty(&iucv_irq_cpumask)) - return 0; + goto __free_cpumask; + smp_call_function_single(cpumask_first(&iucv_buffer_cpumask), iucv_allow_cpu, NULL, 1); - return 0; + +__free_cpumask: + free_cpumask_var(cpumask); + return ret; } /** diff --git a/net/mac80211/mesh_pathtbl.c b/net/mac80211/mesh_pathtbl.c index e4c62b0a3fdb..f79996fc2d63 100644 --- a/net/mac80211/mesh_pathtbl.c +++ b/net/mac80211/mesh_pathtbl.c @@ -806,10 +806,23 @@ void mesh_path_discard_frame(struct ieee80211_sub_if_data *sdata, */ void mesh_path_flush_pending(struct mesh_path *mpath) { + struct ieee80211_sub_if_data *sdata = mpath->sdata; + struct ieee80211_if_mesh *ifmsh = &sdata->u.mesh; + struct mesh_preq_queue *preq, *tmp; struct sk_buff *skb; while ((skb = skb_dequeue(&mpath->frame_queue)) != NULL) mesh_path_discard_frame(mpath->sdata, skb); + + spin_lock_bh(&ifmsh->mesh_preq_queue_lock); + list_for_each_entry_safe(preq, tmp, &ifmsh->preq_queue.list, list) { + if (ether_addr_equal(mpath->dst, preq->dst)) { + list_del(&preq->list); + kfree(preq); + --ifmsh->preq_queue_len; + } + } + spin_unlock_bh(&ifmsh->mesh_preq_queue_lock); } /** diff --git a/net/mac80211/sta_info.c b/net/mac80211/sta_info.c index f2663c0a1e6f..22164cb6e373 100644 --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c @@ -1249,7 +1249,7 @@ void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta) skb_queue_head_init(&pending); /* sync with ieee80211_tx_h_unicast_ps_buf */ - spin_lock(&sta->ps_lock); + spin_lock_bh(&sta->ps_lock); /* Send all buffered frames to the station */ for (ac = 0; ac < IEEE80211_NUM_ACS; ac++) { int count = skb_queue_len(&pending), tmp; @@ -1278,7 +1278,7 @@ void ieee80211_sta_ps_deliver_wakeup(struct sta_info *sta) */ clear_sta_flag(sta, WLAN_STA_PSPOLL); clear_sta_flag(sta, WLAN_STA_UAPSD); - spin_unlock(&sta->ps_lock); + spin_unlock_bh(&sta->ps_lock); atomic_dec(&ps->num_sta_ps); diff --git a/net/netfilter/nf_tables_api.c b/net/netfilter/nf_tables_api.c index 92d02a4611ac..0d71f607a4c6 100644 --- a/net/netfilter/nf_tables_api.c +++ b/net/netfilter/nf_tables_api.c @@ -3719,8 +3719,7 @@ static int nf_tables_fill_setelem(struct sk_buff *skb, if (nft_set_ext_exists(ext, NFT_SET_EXT_DATA) && nft_data_dump(skb, NFTA_SET_ELEM_DATA, nft_set_ext_data(ext), - set->dtype == NFT_DATA_VERDICT ? NFT_DATA_VERDICT : NFT_DATA_VALUE, - set->dlen) < 0) + nft_set_datatype(set), set->dlen) < 0) goto nla_put_failure; if (nft_set_ext_exists(ext, NFT_SET_EXT_EXPR) && @@ -5956,6 +5955,9 @@ static int nft_validate_register_store(const struct nft_ctx *ctx, return 0; default: + if (type != NFT_DATA_VALUE) + return -EINVAL; + if (reg < NFT_REG_1 * NFT_REG_SIZE / NFT_REG32_SIZE) return -EINVAL; if (len == 0) @@ -5964,8 +5966,6 @@ static int nft_validate_register_store(const struct nft_ctx *ctx, FIELD_SIZEOF(struct nft_regs, data)) return -ERANGE; - if (data != NULL && type != NFT_DATA_VALUE) - return -EINVAL; return 0; } } diff --git a/net/netfilter/nft_lookup.c b/net/netfilter/nft_lookup.c index 7577a486635a..23a270b2cf8f 100644 --- a/net/netfilter/nft_lookup.c +++ b/net/netfilter/nft_lookup.c @@ -101,7 +101,8 @@ static int nft_lookup_init(const struct nft_ctx *ctx, return -EINVAL; err = nft_parse_register_store(ctx, tb[NFTA_LOOKUP_DREG], - &priv->dreg, NULL, set->dtype, + &priv->dreg, NULL, + nft_set_datatype(set), set->dlen); if (err < 0) return err; diff --git a/net/netrom/nr_timer.c b/net/netrom/nr_timer.c index 1fb9084bb937..307fd39e0645 100644 --- a/net/netrom/nr_timer.c +++ b/net/netrom/nr_timer.c @@ -125,7 +125,8 @@ static void nr_heartbeat_expiry(unsigned long param) is accepted() it isn't 'dead' so doesn't get removed. */ if (sock_flag(sk, SOCK_DESTROY) || (sk->sk_state == TCP_LISTEN && sock_flag(sk, SOCK_DEAD))) { - sock_hold(sk); + if (sk->sk_state == TCP_LISTEN) + sock_hold(sk); bh_unlock_sock(sk); nr_destroy_socket(sk); goto out; diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index de917d45e512..82994e3c0fd0 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c @@ -112,7 +112,8 @@ static void rpc_clnt_remove_pipedir(struct rpc_clnt *clnt) pipefs_sb = rpc_get_sb_net(net); if (pipefs_sb) { - __rpc_clnt_remove_pipedir(clnt); + if (pipefs_sb == clnt->pipefs_sb) + __rpc_clnt_remove_pipedir(clnt); rpc_put_sb_net(net); } } @@ -152,6 +153,8 @@ rpc_setup_pipedir(struct super_block *pipefs_sb, struct rpc_clnt *clnt) { struct dentry *dentry; + clnt->pipefs_sb = pipefs_sb; + if (clnt->cl_program->pipe_dir_name != NULL) { dentry = rpc_setup_pipedir_sb(pipefs_sb, clnt); if (IS_ERR(dentry)) diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index 9a3575ca7e9b..a55b698047c9 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c @@ -194,15 +194,9 @@ static inline int unix_may_send(struct sock *sk, struct sock *osk) return unix_peer(osk) == NULL || unix_our_peer(sk, osk); } -static inline int unix_recvq_full(const struct sock *sk) -{ - return skb_queue_len(&sk->sk_receive_queue) > sk->sk_max_ack_backlog; -} - static inline int unix_recvq_full_lockless(const struct sock *sk) { - return skb_queue_len_lockless(&sk->sk_receive_queue) > - READ_ONCE(sk->sk_max_ack_backlog); + return skb_queue_len_lockless(&sk->sk_receive_queue) > sk->sk_max_ack_backlog; } struct sock *unix_peer_get(struct sock *s) @@ -456,7 +450,12 @@ static int unix_dgram_peer_wake_me(struct sock *sk, struct sock *other) connected = unix_dgram_peer_wake_connect(sk, other); - if (unix_recvq_full(other)) + /* If other is SOCK_DEAD, we want to make sure we signal + * POLLOUT, such that a subsequent write() can get a + * -ECONNREFUSED. Otherwise, if we haven't queued any skbs + * to other and its full, we will hang waiting for POLLOUT. + */ + if (unix_recvq_full_lockless(other) && !sock_flag(other, SOCK_DEAD)) return 1; if (connected) @@ -465,9 +464,9 @@ static int unix_dgram_peer_wake_me(struct sock *sk, struct sock *other) return 0; } -static int unix_writable(const struct sock *sk) +static int unix_writable(const struct sock *sk, unsigned char state) { - return sk->sk_state != TCP_LISTEN && + return state != TCP_LISTEN && (refcount_read(&sk->sk_wmem_alloc) << 2) <= sk->sk_sndbuf; } @@ -476,7 +475,7 @@ static void unix_write_space(struct sock *sk) struct socket_wq *wq; rcu_read_lock(); - if (unix_writable(sk)) { + if (unix_writable(sk, READ_ONCE(sk->sk_state))) { wq = rcu_dereference(sk->sk_wq); if (skwq_has_sleeper(wq)) wake_up_interruptible_sync_poll(&wq->wait, @@ -548,7 +547,7 @@ static void unix_release_sock(struct sock *sk, int embrion) /* Clear state */ unix_state_lock(sk); sock_orphan(sk); - sk->sk_shutdown = SHUTDOWN_MASK; + WRITE_ONCE(sk->sk_shutdown, SHUTDOWN_MASK); path = u->path; u->path.dentry = NULL; u->path.mnt = NULL; @@ -566,7 +565,7 @@ static void unix_release_sock(struct sock *sk, int embrion) if (sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) { unix_state_lock(skpair); /* No more writes */ - skpair->sk_shutdown = SHUTDOWN_MASK; + WRITE_ONCE(skpair->sk_shutdown, SHUTDOWN_MASK); if (!skb_queue_empty(&sk->sk_receive_queue) || embrion) skpair->sk_err = ECONNRESET; unix_state_unlock(skpair); @@ -861,7 +860,7 @@ static struct sock *unix_create1(struct net *net, struct socket *sock, int kern) sk->sk_allocation = GFP_KERNEL_ACCOUNT; sk->sk_write_space = unix_write_space; - sk->sk_max_ack_backlog = net->unx.sysctl_max_dgram_qlen; + sk->sk_max_ack_backlog = READ_ONCE(net->unx.sysctl_max_dgram_qlen); sk->sk_destruct = unix_sock_destructor; u = unix_sk(sk); u->inflight = 0; @@ -1382,7 +1381,7 @@ restart: if (other->sk_shutdown & RCV_SHUTDOWN) goto out_unlock; - if (unix_recvq_full(other)) { + if (unix_recvq_full_lockless(other)) { err = -EAGAIN; if (!timeo) goto out_unlock; @@ -1986,7 +1985,7 @@ static int unix_stream_sendmsg(struct socket *sock, struct msghdr *msg, goto out_err; if (msg->msg_namelen) { - err = sk->sk_state == TCP_ESTABLISHED ? -EISCONN : -EOPNOTSUPP; + err = READ_ONCE(sk->sk_state) == TCP_ESTABLISHED ? -EISCONN : -EOPNOTSUPP; goto out_err; } else { err = -ENOTCONN; @@ -2189,7 +2188,7 @@ static int unix_seqpacket_sendmsg(struct socket *sock, struct msghdr *msg, if (err) return err; - if (sk->sk_state != TCP_ESTABLISHED) + if (READ_ONCE(sk->sk_state) != TCP_ESTABLISHED) return -ENOTCONN; if (msg->msg_namelen) @@ -2203,7 +2202,7 @@ static int unix_seqpacket_recvmsg(struct socket *sock, struct msghdr *msg, { struct sock *sk = sock->sk; - if (sk->sk_state != TCP_ESTABLISHED) + if (READ_ONCE(sk->sk_state) != TCP_ESTABLISHED) return -ENOTCONN; return unix_dgram_recvmsg(sock, msg, size, flags); @@ -2433,7 +2432,7 @@ static int unix_stream_read_generic(struct unix_stream_read_state *state, size_t size = state->size; unsigned int last_len; - if (unlikely(sk->sk_state != TCP_ESTABLISHED)) { + if (unlikely(READ_ONCE(sk->sk_state) != TCP_ESTABLISHED)) { err = -EINVAL; goto out; } @@ -2685,7 +2684,7 @@ static int unix_shutdown(struct socket *sock, int mode) ++mode; unix_state_lock(sk); - sk->sk_shutdown |= mode; + WRITE_ONCE(sk->sk_shutdown, sk->sk_shutdown | mode); other = unix_peer(sk); if (other) sock_hold(other); @@ -2702,7 +2701,7 @@ static int unix_shutdown(struct socket *sock, int mode) if (mode&SEND_SHUTDOWN) peer_mode |= RCV_SHUTDOWN; unix_state_lock(other); - other->sk_shutdown |= peer_mode; + WRITE_ONCE(other->sk_shutdown, other->sk_shutdown | peer_mode); unix_state_unlock(other); other->sk_state_change(other); if (peer_mode == SHUTDOWN_MASK) @@ -2721,7 +2720,7 @@ long unix_inq_len(struct sock *sk) struct sk_buff *skb; long amount = 0; - if (sk->sk_state == TCP_LISTEN) + if (READ_ONCE(sk->sk_state) == TCP_LISTEN) return -EINVAL; spin_lock(&sk->sk_receive_queue.lock); @@ -2821,16 +2820,20 @@ static unsigned int unix_poll(struct file *file, struct socket *sock, poll_table { struct sock *sk = sock->sk; unsigned int mask; + u8 shutdown; + unsigned char state; sock_poll_wait(file, sk_sleep(sk), wait); mask = 0; + shutdown = READ_ONCE(sk->sk_shutdown); + state = READ_ONCE(sk->sk_state); /* exceptional events? */ if (sk->sk_err) mask |= POLLERR; - if (sk->sk_shutdown == SHUTDOWN_MASK) + if (shutdown == SHUTDOWN_MASK) mask |= POLLHUP; - if (sk->sk_shutdown & RCV_SHUTDOWN) + if (shutdown & RCV_SHUTDOWN) mask |= POLLRDHUP | POLLIN | POLLRDNORM; /* readable? */ @@ -2839,14 +2842,14 @@ static unsigned int unix_poll(struct file *file, struct socket *sock, poll_table /* Connection-based need to check for termination and startup */ if ((sk->sk_type == SOCK_STREAM || sk->sk_type == SOCK_SEQPACKET) && - sk->sk_state == TCP_CLOSE) + state == TCP_CLOSE) mask |= POLLHUP; /* * we set writable also when the other side has shut down the * connection. This prevents stuck sockets. */ - if (unix_writable(sk)) + if (unix_writable(sk, state)) mask |= POLLOUT | POLLWRNORM | POLLWRBAND; return mask; @@ -2857,18 +2860,22 @@ static unsigned int unix_dgram_poll(struct file *file, struct socket *sock, { struct sock *sk = sock->sk, *other; unsigned int mask, writable; + unsigned char state; + u8 shutdown; sock_poll_wait(file, sk_sleep(sk), wait); mask = 0; + shutdown = READ_ONCE(sk->sk_shutdown); + state = READ_ONCE(sk->sk_state); /* exceptional events? */ if (sk->sk_err || !skb_queue_empty_lockless(&sk->sk_error_queue)) mask |= POLLERR | (sock_flag(sk, SOCK_SELECT_ERR_QUEUE) ? POLLPRI : 0); - if (sk->sk_shutdown & RCV_SHUTDOWN) + if (shutdown & RCV_SHUTDOWN) mask |= POLLRDHUP | POLLIN | POLLRDNORM; - if (sk->sk_shutdown == SHUTDOWN_MASK) + if (shutdown == SHUTDOWN_MASK) mask |= POLLHUP; /* readable? */ @@ -2876,19 +2883,14 @@ static unsigned int unix_dgram_poll(struct file *file, struct socket *sock, mask |= POLLIN | POLLRDNORM; /* Connection-based need to check for termination and startup */ - if (sk->sk_type == SOCK_SEQPACKET) { - if (sk->sk_state == TCP_CLOSE) - mask |= POLLHUP; - /* connection hasn't started yet? */ - if (sk->sk_state == TCP_SYN_SENT) - return mask; - } + if (sk->sk_type == SOCK_SEQPACKET && state == TCP_CLOSE) + mask |= POLLHUP; /* No write status requested, avoid expensive OUT tests. */ if (!(poll_requested_events(wait) & (POLLWRBAND|POLLWRNORM|POLLOUT))) return mask; - writable = unix_writable(sk); + writable = unix_writable(sk, state); if (writable) { unix_state_lock(sk); diff --git a/net/unix/diag.c b/net/unix/diag.c index 4f53c3d33d76..abce5a8c334f 100644 --- a/net/unix/diag.c +++ b/net/unix/diag.c @@ -62,7 +62,7 @@ static int sk_diag_dump_icons(struct sock *sk, struct sk_buff *nlskb) u32 *buf; int i; - if (sk->sk_state == TCP_LISTEN) { + if (READ_ONCE(sk->sk_state) == TCP_LISTEN) { spin_lock(&sk->sk_receive_queue.lock); attr = nla_reserve(nlskb, UNIX_DIAG_ICONS, @@ -100,8 +100,8 @@ static int sk_diag_show_rqlen(struct sock *sk, struct sk_buff *nlskb) { struct unix_diag_rqlen rql; - if (sk->sk_state == TCP_LISTEN) { - rql.udiag_rqueue = sk->sk_receive_queue.qlen; + if (READ_ONCE(sk->sk_state) == TCP_LISTEN) { + rql.udiag_rqueue = skb_queue_len_lockless(&sk->sk_receive_queue); rql.udiag_wqueue = sk->sk_max_ack_backlog; } else { rql.udiag_rqueue = (u32) unix_inq_len(sk); @@ -125,7 +125,7 @@ static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct unix_diag_r rep = nlmsg_data(nlh); rep->udiag_family = AF_UNIX; rep->udiag_type = sk->sk_type; - rep->udiag_state = sk->sk_state; + rep->udiag_state = READ_ONCE(sk->sk_state); rep->pad = 0; rep->udiag_ino = sk_ino; sock_diag_save_cookie(sk, rep->udiag_cookie); @@ -154,7 +154,7 @@ static int sk_diag_fill(struct sock *sk, struct sk_buff *skb, struct unix_diag_r sock_diag_put_meminfo(sk, skb, UNIX_DIAG_MEMINFO)) goto out_nlmsg_trim; - if (nla_put_u8(skb, UNIX_DIAG_SHUTDOWN, sk->sk_shutdown)) + if (nla_put_u8(skb, UNIX_DIAG_SHUTDOWN, READ_ONCE(sk->sk_shutdown))) goto out_nlmsg_trim; nlmsg_end(skb, nlh); @@ -203,7 +203,7 @@ static int unix_diag_dump(struct sk_buff *skb, struct netlink_callback *cb) continue; if (num < s_num) goto next; - if (!(req->udiag_states & (1 << sk->sk_state))) + if (!(req->udiag_states & (1 << READ_ONCE(sk->sk_state)))) goto next; if (sk_diag_dump(sk, skb, req, NETLINK_CB(cb->skb).portid, diff --git a/sound/soc/fsl/fsl-asoc-card.c b/sound/soc/fsl/fsl-asoc-card.c index 393100edd5fd..a465c40058b8 100644 --- a/sound/soc/fsl/fsl-asoc-card.c +++ b/sound/soc/fsl/fsl-asoc-card.c @@ -483,6 +483,8 @@ static int fsl_asoc_card_probe(struct platform_device *pdev) if (!priv) return -ENOMEM; + priv->pdev = pdev; + cpu_np = of_parse_phandle(np, "audio-cpu", 0); /* Give a chance to old DT binding */ if (!cpu_np) @@ -595,7 +597,6 @@ static int fsl_asoc_card_probe(struct platform_device *pdev) codec_dev->name); /* Initialize sound card */ - priv->pdev = pdev; priv->card.dev = &pdev->dev; priv->card.name = priv->name; priv->card.dai_link = priv->dai_link; diff --git a/sound/synth/emux/soundfont.c b/sound/synth/emux/soundfont.c index 31a4ea94830e..235b16af6083 100644 --- a/sound/synth/emux/soundfont.c +++ b/sound/synth/emux/soundfont.c @@ -710,7 +710,6 @@ load_data(struct snd_sf_list *sflist, const void __user *data, long count) struct snd_soundfont *sf; struct soundfont_sample_info sample_info; struct snd_sf_sample *sp; - long off; /* patch must be opened */ if ((sf = sflist->currsf) == NULL) @@ -719,12 +718,16 @@ load_data(struct snd_sf_list *sflist, const void __user *data, long count) if (is_special_type(sf->type)) return -EINVAL; + if (count < (long)sizeof(sample_info)) { + return -EINVAL; + } if (copy_from_user(&sample_info, data, sizeof(sample_info))) return -EFAULT; + data += sizeof(sample_info); + count -= sizeof(sample_info); - off = sizeof(sample_info); - - if (sample_info.size != (count-off)/2) + // SoundFont uses S16LE samples. + if (sample_info.size * 2 != count) return -EINVAL; /* Check for dup */ @@ -751,7 +754,7 @@ load_data(struct snd_sf_list *sflist, const void __user *data, long count) int rc; rc = sflist->callback.sample_new (sflist->callback.private_data, sp, sflist->memhdr, - data + off, count - off); + data, count); if (rc < 0) { sf_sample_delete(sflist, sf, sp); return rc; @@ -962,10 +965,12 @@ load_guspatch(struct snd_sf_list *sflist, const char __user *data, } if (copy_from_user(&patch, data, sizeof(patch))) return -EFAULT; - count -= sizeof(patch); data += sizeof(patch); + if ((patch.len << (patch.mode & WAVE_16_BITS ? 1 : 0)) != count) + return -EINVAL; + sf = newsf(sflist, SNDRV_SFNT_PAT_TYPE_GUS|SNDRV_SFNT_PAT_SHARED, NULL); if (sf == NULL) return -ENOMEM; diff --git a/tools/include/asm-generic/hugetlb_encode.h b/tools/include/asm-generic/hugetlb_encode.h index e4732d3c2998..9d279fa4c36f 100644 --- a/tools/include/asm-generic/hugetlb_encode.h +++ b/tools/include/asm-generic/hugetlb_encode.h @@ -20,15 +20,15 @@ #define HUGETLB_FLAG_ENCODE_SHIFT 26 #define HUGETLB_FLAG_ENCODE_MASK 0x3f -#define HUGETLB_FLAG_ENCODE_64KB (16 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_512KB (19 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_1MB (20 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_2MB (21 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_8MB (23 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_16MB (24 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_256MB (28 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_1GB (30 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_2GB (31 << HUGETLB_FLAG_ENCODE_SHIFT) -#define HUGETLB_FLAG_ENCODE_16GB (34 << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_64KB (16U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_512KB (19U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_1MB (20U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_2MB (21U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_8MB (23U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_16MB (24U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_256MB (28U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_1GB (30U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_2GB (31U << HUGETLB_FLAG_ENCODE_SHIFT) +#define HUGETLB_FLAG_ENCODE_16GB (34U << HUGETLB_FLAG_ENCODE_SHIFT) #endif /* _ASM_GENERIC_HUGETLB_ENCODE_H_ */ diff --git a/tools/testing/selftests/vm/compaction_test.c b/tools/testing/selftests/vm/compaction_test.c index bcec71250873..e056cfc487e0 100644 --- a/tools/testing/selftests/vm/compaction_test.c +++ b/tools/testing/selftests/vm/compaction_test.c @@ -32,7 +32,7 @@ int read_memory_info(unsigned long *memfree, unsigned long *hugepagesize) FILE *cmdfile = popen(cmd, "r"); if (!(fgets(buffer, sizeof(buffer), cmdfile))) { - perror("Failed to read meminfo\n"); + ksft_print_msg("Failed to read meminfo: %s\n", strerror(errno)); return -1; } @@ -43,7 +43,7 @@ int read_memory_info(unsigned long *memfree, unsigned long *hugepagesize) cmdfile = popen(cmd, "r"); if (!(fgets(buffer, sizeof(buffer), cmdfile))) { - perror("Failed to read meminfo\n"); + ksft_print_msg("Failed to read meminfo: %s\n", strerror(errno)); return -1; } @@ -61,14 +61,14 @@ int prereq(void) fd = open("/proc/sys/vm/compact_unevictable_allowed", O_RDONLY | O_NONBLOCK); if (fd < 0) { - perror("Failed to open\n" - "/proc/sys/vm/compact_unevictable_allowed\n"); + ksft_print_msg("Failed to open /proc/sys/vm/compact_unevictable_allowed: %s\n", + strerror(errno)); return -1; } if (read(fd, &allowed, sizeof(char)) != sizeof(char)) { - perror("Failed to read from\n" - "/proc/sys/vm/compact_unevictable_allowed\n"); + ksft_print_msg("Failed to read from /proc/sys/vm/compact_unevictable_allowed: %s\n", + strerror(errno)); close(fd); return -1; } @@ -77,15 +77,17 @@ int prereq(void) if (allowed == '1') return 0; + ksft_print_msg("Compaction isn't allowed\n"); return -1; } -int check_compaction(unsigned long mem_free, unsigned int hugepage_size) +int check_compaction(unsigned long mem_free, unsigned long hugepage_size) { - int fd; + unsigned long nr_hugepages_ul; + int fd, ret = -1; int compaction_index = 0; - char initial_nr_hugepages[10] = {0}; - char nr_hugepages[10] = {0}; + char initial_nr_hugepages[20] = {0}; + char nr_hugepages[20] = {0}; /* We want to test with 80% of available memory. Else, OOM killer comes in to play */ @@ -93,18 +95,23 @@ int check_compaction(unsigned long mem_free, unsigned int hugepage_size) fd = open("/proc/sys/vm/nr_hugepages", O_RDWR | O_NONBLOCK); if (fd < 0) { - perror("Failed to open /proc/sys/vm/nr_hugepages"); + ksft_test_result_fail("Failed to open /proc/sys/vm/nr_hugepages: %s\n", + strerror(errno)); return -1; } if (read(fd, initial_nr_hugepages, sizeof(initial_nr_hugepages)) <= 0) { - perror("Failed to read from /proc/sys/vm/nr_hugepages"); + ksft_test_result_fail("Failed to read from /proc/sys/vm/nr_hugepages: %s\n", + strerror(errno)); goto close_fd; } + lseek(fd, 0, SEEK_SET); + /* Start with the initial condition of 0 huge pages*/ if (write(fd, "0", sizeof(char)) != sizeof(char)) { - perror("Failed to write 0 to /proc/sys/vm/nr_hugepages\n"); + ksft_test_result_fail("Failed to write 0 to /proc/sys/vm/nr_hugepages: %s\n", + strerror(errno)); goto close_fd; } @@ -113,82 +120,80 @@ int check_compaction(unsigned long mem_free, unsigned int hugepage_size) /* Request a large number of huge pages. The Kernel will allocate as much as it can */ if (write(fd, "100000", (6*sizeof(char))) != (6*sizeof(char))) { - perror("Failed to write 100000 to /proc/sys/vm/nr_hugepages\n"); + ksft_test_result_fail("Failed to write 100000 to /proc/sys/vm/nr_hugepages: %s\n", + strerror(errno)); goto close_fd; } lseek(fd, 0, SEEK_SET); if (read(fd, nr_hugepages, sizeof(nr_hugepages)) <= 0) { - perror("Failed to re-read from /proc/sys/vm/nr_hugepages\n"); + ksft_test_result_fail("Failed to re-read from /proc/sys/vm/nr_hugepages: %s\n", + strerror(errno)); goto close_fd; } /* We should have been able to request at least 1/3 rd of the memory in huge pages */ - compaction_index = mem_free/(atoi(nr_hugepages) * hugepage_size); - - if (compaction_index > 3) { - printf("No of huge pages allocated = %d\n", - (atoi(nr_hugepages))); - fprintf(stderr, "ERROR: Less that 1/%d of memory is available\n" - "as huge pages\n", compaction_index); + nr_hugepages_ul = strtoul(nr_hugepages, NULL, 10); + if (!nr_hugepages_ul) { + ksft_print_msg("ERROR: No memory is available as huge pages\n"); goto close_fd; } - - printf("No of huge pages allocated = %d\n", - (atoi(nr_hugepages))); + compaction_index = mem_free/(nr_hugepages_ul * hugepage_size); lseek(fd, 0, SEEK_SET); if (write(fd, initial_nr_hugepages, strlen(initial_nr_hugepages)) != strlen(initial_nr_hugepages)) { - perror("Failed to write value to /proc/sys/vm/nr_hugepages\n"); + ksft_test_result_fail("Failed to write value to /proc/sys/vm/nr_hugepages: %s\n", + strerror(errno)); goto close_fd; } - close(fd); - return 0; + if (compaction_index > 3) { + ksft_print_msg("ERROR: Less than 1/%d of memory is available\n" + "as huge pages\n", compaction_index); + ksft_test_result_fail("No of huge pages allocated = %d\n", (atoi(nr_hugepages))); + goto close_fd; + } + + ksft_test_result_pass("Memory compaction succeeded. No of huge pages allocated = %d\n", + (atoi(nr_hugepages))); + ret = 0; close_fd: close(fd); - printf("Not OK. Compaction test failed."); - return -1; + return ret; } int main(int argc, char **argv) { struct rlimit lim; - struct map_list *list, *entry; + struct map_list *list = NULL, *entry; size_t page_size, i; void *map = NULL; unsigned long mem_free = 0; unsigned long hugepage_size = 0; unsigned long mem_fragmentable = 0; - if (prereq() != 0) { - printf("Either the sysctl compact_unevictable_allowed is not\n" - "set to 1 or couldn't read the proc file.\n" - "Skipping the test\n"); - return KSFT_SKIP; - } + ksft_print_header(); + + if (prereq() != 0) + return ksft_exit_pass(); + + ksft_set_plan(1); lim.rlim_cur = RLIM_INFINITY; lim.rlim_max = RLIM_INFINITY; - if (setrlimit(RLIMIT_MEMLOCK, &lim)) { - perror("Failed to set rlimit:\n"); - return -1; - } + if (setrlimit(RLIMIT_MEMLOCK, &lim)) + ksft_exit_fail_msg("Failed to set rlimit: %s\n", strerror(errno)); page_size = getpagesize(); - list = NULL; - - if (read_memory_info(&mem_free, &hugepage_size) != 0) { - printf("ERROR: Cannot read meminfo\n"); - return -1; - } + if (read_memory_info(&mem_free, &hugepage_size) != 0) + ksft_exit_fail_msg("Failed to get meminfo\n"); mem_fragmentable = mem_free * 0.8 / 1024; @@ -224,7 +229,7 @@ int main(int argc, char **argv) } if (check_compaction(mem_free, hugepage_size) == 0) - return 0; + return ksft_exit_pass(); - return -1; + return ksft_exit_fail(); }