iov_iter.c 36 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531
  1. #include <linux/export.h>
  2. #include <linux/bvec.h>
  3. #include <linux/uio.h>
  4. #include <linux/pagemap.h>
  5. #include <linux/slab.h>
  6. #include <linux/vmalloc.h>
  7. #include <linux/splice.h>
  8. #include <net/checksum.h>
  9. #define PIPE_PARANOIA /* for now */
  10. #define iterate_iovec(i, n, __v, __p, skip, STEP) { \
  11. size_t left; \
  12. size_t wanted = n; \
  13. __p = i->iov; \
  14. __v.iov_len = min(n, __p->iov_len - skip); \
  15. if (likely(__v.iov_len)) { \
  16. __v.iov_base = __p->iov_base + skip; \
  17. left = (STEP); \
  18. __v.iov_len -= left; \
  19. skip += __v.iov_len; \
  20. n -= __v.iov_len; \
  21. } else { \
  22. left = 0; \
  23. } \
  24. while (unlikely(!left && n)) { \
  25. __p++; \
  26. __v.iov_len = min(n, __p->iov_len); \
  27. if (unlikely(!__v.iov_len)) \
  28. continue; \
  29. __v.iov_base = __p->iov_base; \
  30. left = (STEP); \
  31. __v.iov_len -= left; \
  32. skip = __v.iov_len; \
  33. n -= __v.iov_len; \
  34. } \
  35. n = wanted - n; \
  36. }
  37. #define iterate_kvec(i, n, __v, __p, skip, STEP) { \
  38. size_t wanted = n; \
  39. __p = i->kvec; \
  40. __v.iov_len = min(n, __p->iov_len - skip); \
  41. if (likely(__v.iov_len)) { \
  42. __v.iov_base = __p->iov_base + skip; \
  43. (void)(STEP); \
  44. skip += __v.iov_len; \
  45. n -= __v.iov_len; \
  46. } \
  47. while (unlikely(n)) { \
  48. __p++; \
  49. __v.iov_len = min(n, __p->iov_len); \
  50. if (unlikely(!__v.iov_len)) \
  51. continue; \
  52. __v.iov_base = __p->iov_base; \
  53. (void)(STEP); \
  54. skip = __v.iov_len; \
  55. n -= __v.iov_len; \
  56. } \
  57. n = wanted; \
  58. }
  59. #define iterate_bvec(i, n, __v, __bi, skip, STEP) { \
  60. struct bvec_iter __start; \
  61. __start.bi_size = n; \
  62. __start.bi_bvec_done = skip; \
  63. __start.bi_idx = 0; \
  64. for_each_bvec(__v, i->bvec, __bi, __start) { \
  65. if (!__v.bv_len) \
  66. continue; \
  67. (void)(STEP); \
  68. } \
  69. }
  70. #define iterate_all_kinds(i, n, v, I, B, K) { \
  71. if (likely(n)) { \
  72. size_t skip = i->iov_offset; \
  73. if (unlikely(i->type & ITER_BVEC)) { \
  74. struct bio_vec v; \
  75. struct bvec_iter __bi; \
  76. iterate_bvec(i, n, v, __bi, skip, (B)) \
  77. } else if (unlikely(i->type & ITER_KVEC)) { \
  78. const struct kvec *kvec; \
  79. struct kvec v; \
  80. iterate_kvec(i, n, v, kvec, skip, (K)) \
  81. } else { \
  82. const struct iovec *iov; \
  83. struct iovec v; \
  84. iterate_iovec(i, n, v, iov, skip, (I)) \
  85. } \
  86. } \
  87. }
  88. #define iterate_and_advance(i, n, v, I, B, K) { \
  89. if (unlikely(i->count < n)) \
  90. n = i->count; \
  91. if (i->count) { \
  92. size_t skip = i->iov_offset; \
  93. if (unlikely(i->type & ITER_BVEC)) { \
  94. const struct bio_vec *bvec = i->bvec; \
  95. struct bio_vec v; \
  96. struct bvec_iter __bi; \
  97. iterate_bvec(i, n, v, __bi, skip, (B)) \
  98. i->bvec = __bvec_iter_bvec(i->bvec, __bi); \
  99. i->nr_segs -= i->bvec - bvec; \
  100. skip = __bi.bi_bvec_done; \
  101. } else if (unlikely(i->type & ITER_KVEC)) { \
  102. const struct kvec *kvec; \
  103. struct kvec v; \
  104. iterate_kvec(i, n, v, kvec, skip, (K)) \
  105. if (skip == kvec->iov_len) { \
  106. kvec++; \
  107. skip = 0; \
  108. } \
  109. i->nr_segs -= kvec - i->kvec; \
  110. i->kvec = kvec; \
  111. } else { \
  112. const struct iovec *iov; \
  113. struct iovec v; \
  114. iterate_iovec(i, n, v, iov, skip, (I)) \
  115. if (skip == iov->iov_len) { \
  116. iov++; \
  117. skip = 0; \
  118. } \
  119. i->nr_segs -= iov - i->iov; \
  120. i->iov = iov; \
  121. } \
  122. i->count -= n; \
  123. i->iov_offset = skip; \
  124. } \
  125. }
  126. static int copyout(void __user *to, const void *from, size_t n)
  127. {
  128. if (access_ok(VERIFY_WRITE, to, n)) {
  129. kasan_check_read(from, n);
  130. n = raw_copy_to_user(to, from, n);
  131. }
  132. return n;
  133. }
  134. static int copyin(void *to, const void __user *from, size_t n)
  135. {
  136. if (access_ok(VERIFY_READ, from, n)) {
  137. kasan_check_write(to, n);
  138. n = raw_copy_from_user(to, from, n);
  139. }
  140. return n;
  141. }
  142. static size_t copy_page_to_iter_iovec(struct page *page, size_t offset, size_t bytes,
  143. struct iov_iter *i)
  144. {
  145. size_t skip, copy, left, wanted;
  146. const struct iovec *iov;
  147. char __user *buf;
  148. void *kaddr, *from;
  149. if (unlikely(bytes > i->count))
  150. bytes = i->count;
  151. if (unlikely(!bytes))
  152. return 0;
  153. might_fault();
  154. wanted = bytes;
  155. iov = i->iov;
  156. skip = i->iov_offset;
  157. buf = iov->iov_base + skip;
  158. copy = min(bytes, iov->iov_len - skip);
  159. if (IS_ENABLED(CONFIG_HIGHMEM) && !fault_in_pages_writeable(buf, copy)) {
  160. kaddr = kmap_atomic(page);
  161. from = kaddr + offset;
  162. /* first chunk, usually the only one */
  163. left = copyout(buf, from, copy);
  164. copy -= left;
  165. skip += copy;
  166. from += copy;
  167. bytes -= copy;
  168. while (unlikely(!left && bytes)) {
  169. iov++;
  170. buf = iov->iov_base;
  171. copy = min(bytes, iov->iov_len);
  172. left = copyout(buf, from, copy);
  173. copy -= left;
  174. skip = copy;
  175. from += copy;
  176. bytes -= copy;
  177. }
  178. if (likely(!bytes)) {
  179. kunmap_atomic(kaddr);
  180. goto done;
  181. }
  182. offset = from - kaddr;
  183. buf += copy;
  184. kunmap_atomic(kaddr);
  185. copy = min(bytes, iov->iov_len - skip);
  186. }
  187. /* Too bad - revert to non-atomic kmap */
  188. kaddr = kmap(page);
  189. from = kaddr + offset;
  190. left = copyout(buf, from, copy);
  191. copy -= left;
  192. skip += copy;
  193. from += copy;
  194. bytes -= copy;
  195. while (unlikely(!left && bytes)) {
  196. iov++;
  197. buf = iov->iov_base;
  198. copy = min(bytes, iov->iov_len);
  199. left = copyout(buf, from, copy);
  200. copy -= left;
  201. skip = copy;
  202. from += copy;
  203. bytes -= copy;
  204. }
  205. kunmap(page);
  206. done:
  207. if (skip == iov->iov_len) {
  208. iov++;
  209. skip = 0;
  210. }
  211. i->count -= wanted - bytes;
  212. i->nr_segs -= iov - i->iov;
  213. i->iov = iov;
  214. i->iov_offset = skip;
  215. return wanted - bytes;
  216. }
  217. static size_t copy_page_from_iter_iovec(struct page *page, size_t offset, size_t bytes,
  218. struct iov_iter *i)
  219. {
  220. size_t skip, copy, left, wanted;
  221. const struct iovec *iov;
  222. char __user *buf;
  223. void *kaddr, *to;
  224. if (unlikely(bytes > i->count))
  225. bytes = i->count;
  226. if (unlikely(!bytes))
  227. return 0;
  228. might_fault();
  229. wanted = bytes;
  230. iov = i->iov;
  231. skip = i->iov_offset;
  232. buf = iov->iov_base + skip;
  233. copy = min(bytes, iov->iov_len - skip);
  234. if (IS_ENABLED(CONFIG_HIGHMEM) && !fault_in_pages_readable(buf, copy)) {
  235. kaddr = kmap_atomic(page);
  236. to = kaddr + offset;
  237. /* first chunk, usually the only one */
  238. left = copyin(to, buf, copy);
  239. copy -= left;
  240. skip += copy;
  241. to += copy;
  242. bytes -= copy;
  243. while (unlikely(!left && bytes)) {
  244. iov++;
  245. buf = iov->iov_base;
  246. copy = min(bytes, iov->iov_len);
  247. left = copyin(to, buf, copy);
  248. copy -= left;
  249. skip = copy;
  250. to += copy;
  251. bytes -= copy;
  252. }
  253. if (likely(!bytes)) {
  254. kunmap_atomic(kaddr);
  255. goto done;
  256. }
  257. offset = to - kaddr;
  258. buf += copy;
  259. kunmap_atomic(kaddr);
  260. copy = min(bytes, iov->iov_len - skip);
  261. }
  262. /* Too bad - revert to non-atomic kmap */
  263. kaddr = kmap(page);
  264. to = kaddr + offset;
  265. left = copyin(to, buf, copy);
  266. copy -= left;
  267. skip += copy;
  268. to += copy;
  269. bytes -= copy;
  270. while (unlikely(!left && bytes)) {
  271. iov++;
  272. buf = iov->iov_base;
  273. copy = min(bytes, iov->iov_len);
  274. left = copyin(to, buf, copy);
  275. copy -= left;
  276. skip = copy;
  277. to += copy;
  278. bytes -= copy;
  279. }
  280. kunmap(page);
  281. done:
  282. if (skip == iov->iov_len) {
  283. iov++;
  284. skip = 0;
  285. }
  286. i->count -= wanted - bytes;
  287. i->nr_segs -= iov - i->iov;
  288. i->iov = iov;
  289. i->iov_offset = skip;
  290. return wanted - bytes;
  291. }
  292. #ifdef PIPE_PARANOIA
  293. static bool sanity(const struct iov_iter *i)
  294. {
  295. struct pipe_inode_info *pipe = i->pipe;
  296. int idx = i->idx;
  297. int next = pipe->curbuf + pipe->nrbufs;
  298. if (i->iov_offset) {
  299. struct pipe_buffer *p;
  300. if (unlikely(!pipe->nrbufs))
  301. goto Bad; // pipe must be non-empty
  302. if (unlikely(idx != ((next - 1) & (pipe->buffers - 1))))
  303. goto Bad; // must be at the last buffer...
  304. p = &pipe->bufs[idx];
  305. if (unlikely(p->offset + p->len != i->iov_offset))
  306. goto Bad; // ... at the end of segment
  307. } else {
  308. if (idx != (next & (pipe->buffers - 1)))
  309. goto Bad; // must be right after the last buffer
  310. }
  311. return true;
  312. Bad:
  313. printk(KERN_ERR "idx = %d, offset = %zd\n", i->idx, i->iov_offset);
  314. printk(KERN_ERR "curbuf = %d, nrbufs = %d, buffers = %d\n",
  315. pipe->curbuf, pipe->nrbufs, pipe->buffers);
  316. for (idx = 0; idx < pipe->buffers; idx++)
  317. printk(KERN_ERR "[%p %p %d %d]\n",
  318. pipe->bufs[idx].ops,
  319. pipe->bufs[idx].page,
  320. pipe->bufs[idx].offset,
  321. pipe->bufs[idx].len);
  322. WARN_ON(1);
  323. return false;
  324. }
  325. #else
  326. #define sanity(i) true
  327. #endif
  328. static inline int next_idx(int idx, struct pipe_inode_info *pipe)
  329. {
  330. return (idx + 1) & (pipe->buffers - 1);
  331. }
  332. static size_t copy_page_to_iter_pipe(struct page *page, size_t offset, size_t bytes,
  333. struct iov_iter *i)
  334. {
  335. struct pipe_inode_info *pipe = i->pipe;
  336. struct pipe_buffer *buf;
  337. size_t off;
  338. int idx;
  339. if (unlikely(bytes > i->count))
  340. bytes = i->count;
  341. if (unlikely(!bytes))
  342. return 0;
  343. if (!sanity(i))
  344. return 0;
  345. off = i->iov_offset;
  346. idx = i->idx;
  347. buf = &pipe->bufs[idx];
  348. if (off) {
  349. if (offset == off && buf->page == page) {
  350. /* merge with the last one */
  351. buf->len += bytes;
  352. i->iov_offset += bytes;
  353. goto out;
  354. }
  355. idx = next_idx(idx, pipe);
  356. buf = &pipe->bufs[idx];
  357. }
  358. if (idx == pipe->curbuf && pipe->nrbufs)
  359. return 0;
  360. pipe->nrbufs++;
  361. buf->ops = &page_cache_pipe_buf_ops;
  362. get_page(buf->page = page);
  363. buf->offset = offset;
  364. buf->len = bytes;
  365. i->iov_offset = offset + bytes;
  366. i->idx = idx;
  367. out:
  368. i->count -= bytes;
  369. return bytes;
  370. }
  371. /*
  372. * Fault in one or more iovecs of the given iov_iter, to a maximum length of
  373. * bytes. For each iovec, fault in each page that constitutes the iovec.
  374. *
  375. * Return 0 on success, or non-zero if the memory could not be accessed (i.e.
  376. * because it is an invalid address).
  377. */
  378. int iov_iter_fault_in_readable(struct iov_iter *i, size_t bytes)
  379. {
  380. size_t skip = i->iov_offset;
  381. const struct iovec *iov;
  382. int err;
  383. struct iovec v;
  384. if (!(i->type & (ITER_BVEC|ITER_KVEC))) {
  385. iterate_iovec(i, bytes, v, iov, skip, ({
  386. err = fault_in_pages_readable(v.iov_base, v.iov_len);
  387. if (unlikely(err))
  388. return err;
  389. 0;}))
  390. }
  391. return 0;
  392. }
  393. EXPORT_SYMBOL(iov_iter_fault_in_readable);
  394. void iov_iter_init(struct iov_iter *i, int direction,
  395. const struct iovec *iov, unsigned long nr_segs,
  396. size_t count)
  397. {
  398. /* It will get better. Eventually... */
  399. if (uaccess_kernel()) {
  400. direction |= ITER_KVEC;
  401. i->type = direction;
  402. i->kvec = (struct kvec *)iov;
  403. } else {
  404. i->type = direction;
  405. i->iov = iov;
  406. }
  407. i->nr_segs = nr_segs;
  408. i->iov_offset = 0;
  409. i->count = count;
  410. }
  411. EXPORT_SYMBOL(iov_iter_init);
  412. static void memcpy_from_page(char *to, struct page *page, size_t offset, size_t len)
  413. {
  414. char *from = kmap_atomic(page);
  415. memcpy(to, from + offset, len);
  416. kunmap_atomic(from);
  417. }
  418. static void memcpy_to_page(struct page *page, size_t offset, const char *from, size_t len)
  419. {
  420. char *to = kmap_atomic(page);
  421. memcpy(to + offset, from, len);
  422. kunmap_atomic(to);
  423. }
  424. static void memzero_page(struct page *page, size_t offset, size_t len)
  425. {
  426. char *addr = kmap_atomic(page);
  427. memset(addr + offset, 0, len);
  428. kunmap_atomic(addr);
  429. }
  430. static inline bool allocated(struct pipe_buffer *buf)
  431. {
  432. return buf->ops == &default_pipe_buf_ops;
  433. }
  434. static inline void data_start(const struct iov_iter *i, int *idxp, size_t *offp)
  435. {
  436. size_t off = i->iov_offset;
  437. int idx = i->idx;
  438. if (off && (!allocated(&i->pipe->bufs[idx]) || off == PAGE_SIZE)) {
  439. idx = next_idx(idx, i->pipe);
  440. off = 0;
  441. }
  442. *idxp = idx;
  443. *offp = off;
  444. }
  445. static size_t push_pipe(struct iov_iter *i, size_t size,
  446. int *idxp, size_t *offp)
  447. {
  448. struct pipe_inode_info *pipe = i->pipe;
  449. size_t off;
  450. int idx;
  451. ssize_t left;
  452. if (unlikely(size > i->count))
  453. size = i->count;
  454. if (unlikely(!size))
  455. return 0;
  456. left = size;
  457. data_start(i, &idx, &off);
  458. *idxp = idx;
  459. *offp = off;
  460. if (off) {
  461. left -= PAGE_SIZE - off;
  462. if (left <= 0) {
  463. pipe->bufs[idx].len += size;
  464. return size;
  465. }
  466. pipe->bufs[idx].len = PAGE_SIZE;
  467. idx = next_idx(idx, pipe);
  468. }
  469. while (idx != pipe->curbuf || !pipe->nrbufs) {
  470. struct page *page = alloc_page(GFP_USER);
  471. if (!page)
  472. break;
  473. pipe->nrbufs++;
  474. pipe->bufs[idx].ops = &default_pipe_buf_ops;
  475. pipe->bufs[idx].page = page;
  476. pipe->bufs[idx].offset = 0;
  477. if (left <= PAGE_SIZE) {
  478. pipe->bufs[idx].len = left;
  479. return size;
  480. }
  481. pipe->bufs[idx].len = PAGE_SIZE;
  482. left -= PAGE_SIZE;
  483. idx = next_idx(idx, pipe);
  484. }
  485. return size - left;
  486. }
  487. static size_t copy_pipe_to_iter(const void *addr, size_t bytes,
  488. struct iov_iter *i)
  489. {
  490. struct pipe_inode_info *pipe = i->pipe;
  491. size_t n, off;
  492. int idx;
  493. if (!sanity(i))
  494. return 0;
  495. bytes = n = push_pipe(i, bytes, &idx, &off);
  496. if (unlikely(!n))
  497. return 0;
  498. for ( ; n; idx = next_idx(idx, pipe), off = 0) {
  499. size_t chunk = min_t(size_t, n, PAGE_SIZE - off);
  500. memcpy_to_page(pipe->bufs[idx].page, off, addr, chunk);
  501. i->idx = idx;
  502. i->iov_offset = off + chunk;
  503. n -= chunk;
  504. addr += chunk;
  505. }
  506. i->count -= bytes;
  507. return bytes;
  508. }
  509. size_t _copy_to_iter(const void *addr, size_t bytes, struct iov_iter *i)
  510. {
  511. const char *from = addr;
  512. if (unlikely(i->type & ITER_PIPE))
  513. return copy_pipe_to_iter(addr, bytes, i);
  514. if (iter_is_iovec(i))
  515. might_fault();
  516. iterate_and_advance(i, bytes, v,
  517. copyout(v.iov_base, (from += v.iov_len) - v.iov_len, v.iov_len),
  518. memcpy_to_page(v.bv_page, v.bv_offset,
  519. (from += v.bv_len) - v.bv_len, v.bv_len),
  520. memcpy(v.iov_base, (from += v.iov_len) - v.iov_len, v.iov_len)
  521. )
  522. return bytes;
  523. }
  524. EXPORT_SYMBOL(_copy_to_iter);
  525. #ifdef CONFIG_ARCH_HAS_UACCESS_MCSAFE
  526. static int copyout_mcsafe(void __user *to, const void *from, size_t n)
  527. {
  528. if (access_ok(VERIFY_WRITE, to, n)) {
  529. kasan_check_read(from, n);
  530. n = copy_to_user_mcsafe((__force void *) to, from, n);
  531. }
  532. return n;
  533. }
  534. static unsigned long memcpy_mcsafe_to_page(struct page *page, size_t offset,
  535. const char *from, size_t len)
  536. {
  537. unsigned long ret;
  538. char *to;
  539. to = kmap_atomic(page);
  540. ret = memcpy_mcsafe(to + offset, from, len);
  541. kunmap_atomic(to);
  542. return ret;
  543. }
  544. size_t _copy_to_iter_mcsafe(const void *addr, size_t bytes, struct iov_iter *i)
  545. {
  546. const char *from = addr;
  547. unsigned long rem, curr_addr, s_addr = (unsigned long) addr;
  548. if (unlikely(i->type & ITER_PIPE)) {
  549. WARN_ON(1);
  550. return 0;
  551. }
  552. if (iter_is_iovec(i))
  553. might_fault();
  554. iterate_and_advance(i, bytes, v,
  555. copyout_mcsafe(v.iov_base, (from += v.iov_len) - v.iov_len, v.iov_len),
  556. ({
  557. rem = memcpy_mcsafe_to_page(v.bv_page, v.bv_offset,
  558. (from += v.bv_len) - v.bv_len, v.bv_len);
  559. if (rem) {
  560. curr_addr = (unsigned long) from;
  561. bytes = curr_addr - s_addr - rem;
  562. return bytes;
  563. }
  564. }),
  565. ({
  566. rem = memcpy_mcsafe(v.iov_base, (from += v.iov_len) - v.iov_len,
  567. v.iov_len);
  568. if (rem) {
  569. curr_addr = (unsigned long) from;
  570. bytes = curr_addr - s_addr - rem;
  571. return bytes;
  572. }
  573. })
  574. )
  575. return bytes;
  576. }
  577. EXPORT_SYMBOL_GPL(_copy_to_iter_mcsafe);
  578. #endif /* CONFIG_ARCH_HAS_UACCESS_MCSAFE */
  579. size_t _copy_from_iter(void *addr, size_t bytes, struct iov_iter *i)
  580. {
  581. char *to = addr;
  582. if (unlikely(i->type & ITER_PIPE)) {
  583. WARN_ON(1);
  584. return 0;
  585. }
  586. if (iter_is_iovec(i))
  587. might_fault();
  588. iterate_and_advance(i, bytes, v,
  589. copyin((to += v.iov_len) - v.iov_len, v.iov_base, v.iov_len),
  590. memcpy_from_page((to += v.bv_len) - v.bv_len, v.bv_page,
  591. v.bv_offset, v.bv_len),
  592. memcpy((to += v.iov_len) - v.iov_len, v.iov_base, v.iov_len)
  593. )
  594. return bytes;
  595. }
  596. EXPORT_SYMBOL(_copy_from_iter);
  597. bool _copy_from_iter_full(void *addr, size_t bytes, struct iov_iter *i)
  598. {
  599. char *to = addr;
  600. if (unlikely(i->type & ITER_PIPE)) {
  601. WARN_ON(1);
  602. return false;
  603. }
  604. if (unlikely(i->count < bytes))
  605. return false;
  606. if (iter_is_iovec(i))
  607. might_fault();
  608. iterate_all_kinds(i, bytes, v, ({
  609. if (copyin((to += v.iov_len) - v.iov_len,
  610. v.iov_base, v.iov_len))
  611. return false;
  612. 0;}),
  613. memcpy_from_page((to += v.bv_len) - v.bv_len, v.bv_page,
  614. v.bv_offset, v.bv_len),
  615. memcpy((to += v.iov_len) - v.iov_len, v.iov_base, v.iov_len)
  616. )
  617. iov_iter_advance(i, bytes);
  618. return true;
  619. }
  620. EXPORT_SYMBOL(_copy_from_iter_full);
  621. size_t _copy_from_iter_nocache(void *addr, size_t bytes, struct iov_iter *i)
  622. {
  623. char *to = addr;
  624. if (unlikely(i->type & ITER_PIPE)) {
  625. WARN_ON(1);
  626. return 0;
  627. }
  628. iterate_and_advance(i, bytes, v,
  629. __copy_from_user_inatomic_nocache((to += v.iov_len) - v.iov_len,
  630. v.iov_base, v.iov_len),
  631. memcpy_from_page((to += v.bv_len) - v.bv_len, v.bv_page,
  632. v.bv_offset, v.bv_len),
  633. memcpy((to += v.iov_len) - v.iov_len, v.iov_base, v.iov_len)
  634. )
  635. return bytes;
  636. }
  637. EXPORT_SYMBOL(_copy_from_iter_nocache);
  638. #ifdef CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE
  639. size_t _copy_from_iter_flushcache(void *addr, size_t bytes, struct iov_iter *i)
  640. {
  641. char *to = addr;
  642. if (unlikely(i->type & ITER_PIPE)) {
  643. WARN_ON(1);
  644. return 0;
  645. }
  646. iterate_and_advance(i, bytes, v,
  647. __copy_from_user_flushcache((to += v.iov_len) - v.iov_len,
  648. v.iov_base, v.iov_len),
  649. memcpy_page_flushcache((to += v.bv_len) - v.bv_len, v.bv_page,
  650. v.bv_offset, v.bv_len),
  651. memcpy_flushcache((to += v.iov_len) - v.iov_len, v.iov_base,
  652. v.iov_len)
  653. )
  654. return bytes;
  655. }
  656. EXPORT_SYMBOL_GPL(_copy_from_iter_flushcache);
  657. #endif
  658. bool _copy_from_iter_full_nocache(void *addr, size_t bytes, struct iov_iter *i)
  659. {
  660. char *to = addr;
  661. if (unlikely(i->type & ITER_PIPE)) {
  662. WARN_ON(1);
  663. return false;
  664. }
  665. if (unlikely(i->count < bytes))
  666. return false;
  667. iterate_all_kinds(i, bytes, v, ({
  668. if (__copy_from_user_inatomic_nocache((to += v.iov_len) - v.iov_len,
  669. v.iov_base, v.iov_len))
  670. return false;
  671. 0;}),
  672. memcpy_from_page((to += v.bv_len) - v.bv_len, v.bv_page,
  673. v.bv_offset, v.bv_len),
  674. memcpy((to += v.iov_len) - v.iov_len, v.iov_base, v.iov_len)
  675. )
  676. iov_iter_advance(i, bytes);
  677. return true;
  678. }
  679. EXPORT_SYMBOL(_copy_from_iter_full_nocache);
  680. static inline bool page_copy_sane(struct page *page, size_t offset, size_t n)
  681. {
  682. struct page *head = compound_head(page);
  683. size_t v = n + offset + page_address(page) - page_address(head);
  684. if (likely(n <= v && v <= (PAGE_SIZE << compound_order(head))))
  685. return true;
  686. WARN_ON(1);
  687. return false;
  688. }
  689. size_t copy_page_to_iter(struct page *page, size_t offset, size_t bytes,
  690. struct iov_iter *i)
  691. {
  692. if (unlikely(!page_copy_sane(page, offset, bytes)))
  693. return 0;
  694. if (i->type & (ITER_BVEC|ITER_KVEC)) {
  695. void *kaddr = kmap_atomic(page);
  696. size_t wanted = copy_to_iter(kaddr + offset, bytes, i);
  697. kunmap_atomic(kaddr);
  698. return wanted;
  699. } else if (likely(!(i->type & ITER_PIPE)))
  700. return copy_page_to_iter_iovec(page, offset, bytes, i);
  701. else
  702. return copy_page_to_iter_pipe(page, offset, bytes, i);
  703. }
  704. EXPORT_SYMBOL(copy_page_to_iter);
  705. size_t copy_page_from_iter(struct page *page, size_t offset, size_t bytes,
  706. struct iov_iter *i)
  707. {
  708. if (unlikely(!page_copy_sane(page, offset, bytes)))
  709. return 0;
  710. if (unlikely(i->type & ITER_PIPE)) {
  711. WARN_ON(1);
  712. return 0;
  713. }
  714. if (i->type & (ITER_BVEC|ITER_KVEC)) {
  715. void *kaddr = kmap_atomic(page);
  716. size_t wanted = _copy_from_iter(kaddr + offset, bytes, i);
  717. kunmap_atomic(kaddr);
  718. return wanted;
  719. } else
  720. return copy_page_from_iter_iovec(page, offset, bytes, i);
  721. }
  722. EXPORT_SYMBOL(copy_page_from_iter);
  723. static size_t pipe_zero(size_t bytes, struct iov_iter *i)
  724. {
  725. struct pipe_inode_info *pipe = i->pipe;
  726. size_t n, off;
  727. int idx;
  728. if (!sanity(i))
  729. return 0;
  730. bytes = n = push_pipe(i, bytes, &idx, &off);
  731. if (unlikely(!n))
  732. return 0;
  733. for ( ; n; idx = next_idx(idx, pipe), off = 0) {
  734. size_t chunk = min_t(size_t, n, PAGE_SIZE - off);
  735. memzero_page(pipe->bufs[idx].page, off, chunk);
  736. i->idx = idx;
  737. i->iov_offset = off + chunk;
  738. n -= chunk;
  739. }
  740. i->count -= bytes;
  741. return bytes;
  742. }
  743. size_t iov_iter_zero(size_t bytes, struct iov_iter *i)
  744. {
  745. if (unlikely(i->type & ITER_PIPE))
  746. return pipe_zero(bytes, i);
  747. iterate_and_advance(i, bytes, v,
  748. clear_user(v.iov_base, v.iov_len),
  749. memzero_page(v.bv_page, v.bv_offset, v.bv_len),
  750. memset(v.iov_base, 0, v.iov_len)
  751. )
  752. return bytes;
  753. }
  754. EXPORT_SYMBOL(iov_iter_zero);
  755. size_t iov_iter_copy_from_user_atomic(struct page *page,
  756. struct iov_iter *i, unsigned long offset, size_t bytes)
  757. {
  758. char *kaddr = kmap_atomic(page), *p = kaddr + offset;
  759. if (unlikely(!page_copy_sane(page, offset, bytes))) {
  760. kunmap_atomic(kaddr);
  761. return 0;
  762. }
  763. if (unlikely(i->type & ITER_PIPE)) {
  764. kunmap_atomic(kaddr);
  765. WARN_ON(1);
  766. return 0;
  767. }
  768. iterate_all_kinds(i, bytes, v,
  769. copyin((p += v.iov_len) - v.iov_len, v.iov_base, v.iov_len),
  770. memcpy_from_page((p += v.bv_len) - v.bv_len, v.bv_page,
  771. v.bv_offset, v.bv_len),
  772. memcpy((p += v.iov_len) - v.iov_len, v.iov_base, v.iov_len)
  773. )
  774. kunmap_atomic(kaddr);
  775. return bytes;
  776. }
  777. EXPORT_SYMBOL(iov_iter_copy_from_user_atomic);
  778. static inline void pipe_truncate(struct iov_iter *i)
  779. {
  780. struct pipe_inode_info *pipe = i->pipe;
  781. if (pipe->nrbufs) {
  782. size_t off = i->iov_offset;
  783. int idx = i->idx;
  784. int nrbufs = (idx - pipe->curbuf) & (pipe->buffers - 1);
  785. if (off) {
  786. pipe->bufs[idx].len = off - pipe->bufs[idx].offset;
  787. idx = next_idx(idx, pipe);
  788. nrbufs++;
  789. }
  790. while (pipe->nrbufs > nrbufs) {
  791. pipe_buf_release(pipe, &pipe->bufs[idx]);
  792. idx = next_idx(idx, pipe);
  793. pipe->nrbufs--;
  794. }
  795. }
  796. }
  797. static void pipe_advance(struct iov_iter *i, size_t size)
  798. {
  799. struct pipe_inode_info *pipe = i->pipe;
  800. if (unlikely(i->count < size))
  801. size = i->count;
  802. if (size) {
  803. struct pipe_buffer *buf;
  804. size_t off = i->iov_offset, left = size;
  805. int idx = i->idx;
  806. if (off) /* make it relative to the beginning of buffer */
  807. left += off - pipe->bufs[idx].offset;
  808. while (1) {
  809. buf = &pipe->bufs[idx];
  810. if (left <= buf->len)
  811. break;
  812. left -= buf->len;
  813. idx = next_idx(idx, pipe);
  814. }
  815. i->idx = idx;
  816. i->iov_offset = buf->offset + left;
  817. }
  818. i->count -= size;
  819. /* ... and discard everything past that point */
  820. pipe_truncate(i);
  821. }
  822. void iov_iter_advance(struct iov_iter *i, size_t size)
  823. {
  824. if (unlikely(i->type & ITER_PIPE)) {
  825. pipe_advance(i, size);
  826. return;
  827. }
  828. iterate_and_advance(i, size, v, 0, 0, 0)
  829. }
  830. EXPORT_SYMBOL(iov_iter_advance);
  831. void iov_iter_revert(struct iov_iter *i, size_t unroll)
  832. {
  833. if (!unroll)
  834. return;
  835. if (WARN_ON(unroll > MAX_RW_COUNT))
  836. return;
  837. i->count += unroll;
  838. if (unlikely(i->type & ITER_PIPE)) {
  839. struct pipe_inode_info *pipe = i->pipe;
  840. int idx = i->idx;
  841. size_t off = i->iov_offset;
  842. while (1) {
  843. size_t n = off - pipe->bufs[idx].offset;
  844. if (unroll < n) {
  845. off -= unroll;
  846. break;
  847. }
  848. unroll -= n;
  849. if (!unroll && idx == i->start_idx) {
  850. off = 0;
  851. break;
  852. }
  853. if (!idx--)
  854. idx = pipe->buffers - 1;
  855. off = pipe->bufs[idx].offset + pipe->bufs[idx].len;
  856. }
  857. i->iov_offset = off;
  858. i->idx = idx;
  859. pipe_truncate(i);
  860. return;
  861. }
  862. if (unroll <= i->iov_offset) {
  863. i->iov_offset -= unroll;
  864. return;
  865. }
  866. unroll -= i->iov_offset;
  867. if (i->type & ITER_BVEC) {
  868. const struct bio_vec *bvec = i->bvec;
  869. while (1) {
  870. size_t n = (--bvec)->bv_len;
  871. i->nr_segs++;
  872. if (unroll <= n) {
  873. i->bvec = bvec;
  874. i->iov_offset = n - unroll;
  875. return;
  876. }
  877. unroll -= n;
  878. }
  879. } else { /* same logics for iovec and kvec */
  880. const struct iovec *iov = i->iov;
  881. while (1) {
  882. size_t n = (--iov)->iov_len;
  883. i->nr_segs++;
  884. if (unroll <= n) {
  885. i->iov = iov;
  886. i->iov_offset = n - unroll;
  887. return;
  888. }
  889. unroll -= n;
  890. }
  891. }
  892. }
  893. EXPORT_SYMBOL(iov_iter_revert);
  894. /*
  895. * Return the count of just the current iov_iter segment.
  896. */
  897. size_t iov_iter_single_seg_count(const struct iov_iter *i)
  898. {
  899. if (unlikely(i->type & ITER_PIPE))
  900. return i->count; // it is a silly place, anyway
  901. if (i->nr_segs == 1)
  902. return i->count;
  903. else if (i->type & ITER_BVEC)
  904. return min(i->count, i->bvec->bv_len - i->iov_offset);
  905. else
  906. return min(i->count, i->iov->iov_len - i->iov_offset);
  907. }
  908. EXPORT_SYMBOL(iov_iter_single_seg_count);
  909. void iov_iter_kvec(struct iov_iter *i, int direction,
  910. const struct kvec *kvec, unsigned long nr_segs,
  911. size_t count)
  912. {
  913. BUG_ON(!(direction & ITER_KVEC));
  914. i->type = direction;
  915. i->kvec = kvec;
  916. i->nr_segs = nr_segs;
  917. i->iov_offset = 0;
  918. i->count = count;
  919. }
  920. EXPORT_SYMBOL(iov_iter_kvec);
  921. void iov_iter_bvec(struct iov_iter *i, int direction,
  922. const struct bio_vec *bvec, unsigned long nr_segs,
  923. size_t count)
  924. {
  925. BUG_ON(!(direction & ITER_BVEC));
  926. i->type = direction;
  927. i->bvec = bvec;
  928. i->nr_segs = nr_segs;
  929. i->iov_offset = 0;
  930. i->count = count;
  931. }
  932. EXPORT_SYMBOL(iov_iter_bvec);
  933. void iov_iter_pipe(struct iov_iter *i, int direction,
  934. struct pipe_inode_info *pipe,
  935. size_t count)
  936. {
  937. BUG_ON(direction != ITER_PIPE);
  938. WARN_ON(pipe->nrbufs == pipe->buffers);
  939. i->type = direction;
  940. i->pipe = pipe;
  941. i->idx = (pipe->curbuf + pipe->nrbufs) & (pipe->buffers - 1);
  942. i->iov_offset = 0;
  943. i->count = count;
  944. i->start_idx = i->idx;
  945. }
  946. EXPORT_SYMBOL(iov_iter_pipe);
  947. unsigned long iov_iter_alignment(const struct iov_iter *i)
  948. {
  949. unsigned long res = 0;
  950. size_t size = i->count;
  951. if (unlikely(i->type & ITER_PIPE)) {
  952. if (size && i->iov_offset && allocated(&i->pipe->bufs[i->idx]))
  953. return size | i->iov_offset;
  954. return size;
  955. }
  956. iterate_all_kinds(i, size, v,
  957. (res |= (unsigned long)v.iov_base | v.iov_len, 0),
  958. res |= v.bv_offset | v.bv_len,
  959. res |= (unsigned long)v.iov_base | v.iov_len
  960. )
  961. return res;
  962. }
  963. EXPORT_SYMBOL(iov_iter_alignment);
  964. unsigned long iov_iter_gap_alignment(const struct iov_iter *i)
  965. {
  966. unsigned long res = 0;
  967. size_t size = i->count;
  968. if (unlikely(i->type & ITER_PIPE)) {
  969. WARN_ON(1);
  970. return ~0U;
  971. }
  972. iterate_all_kinds(i, size, v,
  973. (res |= (!res ? 0 : (unsigned long)v.iov_base) |
  974. (size != v.iov_len ? size : 0), 0),
  975. (res |= (!res ? 0 : (unsigned long)v.bv_offset) |
  976. (size != v.bv_len ? size : 0)),
  977. (res |= (!res ? 0 : (unsigned long)v.iov_base) |
  978. (size != v.iov_len ? size : 0))
  979. );
  980. return res;
  981. }
  982. EXPORT_SYMBOL(iov_iter_gap_alignment);
  983. static inline ssize_t __pipe_get_pages(struct iov_iter *i,
  984. size_t maxsize,
  985. struct page **pages,
  986. int idx,
  987. size_t *start)
  988. {
  989. struct pipe_inode_info *pipe = i->pipe;
  990. ssize_t n = push_pipe(i, maxsize, &idx, start);
  991. if (!n)
  992. return -EFAULT;
  993. maxsize = n;
  994. n += *start;
  995. while (n > 0) {
  996. get_page(*pages++ = pipe->bufs[idx].page);
  997. idx = next_idx(idx, pipe);
  998. n -= PAGE_SIZE;
  999. }
  1000. return maxsize;
  1001. }
  1002. static ssize_t pipe_get_pages(struct iov_iter *i,
  1003. struct page **pages, size_t maxsize, unsigned maxpages,
  1004. size_t *start)
  1005. {
  1006. unsigned npages;
  1007. size_t capacity;
  1008. int idx;
  1009. if (!maxsize)
  1010. return 0;
  1011. if (!sanity(i))
  1012. return -EFAULT;
  1013. data_start(i, &idx, start);
  1014. /* some of this one + all after this one */
  1015. npages = ((i->pipe->curbuf - idx - 1) & (i->pipe->buffers - 1)) + 1;
  1016. capacity = min(npages,maxpages) * PAGE_SIZE - *start;
  1017. return __pipe_get_pages(i, min(maxsize, capacity), pages, idx, start);
  1018. }
  1019. ssize_t iov_iter_get_pages(struct iov_iter *i,
  1020. struct page **pages, size_t maxsize, unsigned maxpages,
  1021. size_t *start)
  1022. {
  1023. if (maxsize > i->count)
  1024. maxsize = i->count;
  1025. if (unlikely(i->type & ITER_PIPE))
  1026. return pipe_get_pages(i, pages, maxsize, maxpages, start);
  1027. iterate_all_kinds(i, maxsize, v, ({
  1028. unsigned long addr = (unsigned long)v.iov_base;
  1029. size_t len = v.iov_len + (*start = addr & (PAGE_SIZE - 1));
  1030. int n;
  1031. int res;
  1032. if (len > maxpages * PAGE_SIZE)
  1033. len = maxpages * PAGE_SIZE;
  1034. addr &= ~(PAGE_SIZE - 1);
  1035. n = DIV_ROUND_UP(len, PAGE_SIZE);
  1036. res = get_user_pages_fast(addr, n, (i->type & WRITE) != WRITE, pages);
  1037. if (unlikely(res < 0))
  1038. return res;
  1039. return (res == n ? len : res * PAGE_SIZE) - *start;
  1040. 0;}),({
  1041. /* can't be more than PAGE_SIZE */
  1042. *start = v.bv_offset;
  1043. get_page(*pages = v.bv_page);
  1044. return v.bv_len;
  1045. }),({
  1046. return -EFAULT;
  1047. })
  1048. )
  1049. return 0;
  1050. }
  1051. EXPORT_SYMBOL(iov_iter_get_pages);
  1052. static struct page **get_pages_array(size_t n)
  1053. {
  1054. return kvmalloc_array(n, sizeof(struct page *), GFP_KERNEL);
  1055. }
  1056. static ssize_t pipe_get_pages_alloc(struct iov_iter *i,
  1057. struct page ***pages, size_t maxsize,
  1058. size_t *start)
  1059. {
  1060. struct page **p;
  1061. ssize_t n;
  1062. int idx;
  1063. int npages;
  1064. if (!maxsize)
  1065. return 0;
  1066. if (!sanity(i))
  1067. return -EFAULT;
  1068. data_start(i, &idx, start);
  1069. /* some of this one + all after this one */
  1070. npages = ((i->pipe->curbuf - idx - 1) & (i->pipe->buffers - 1)) + 1;
  1071. n = npages * PAGE_SIZE - *start;
  1072. if (maxsize > n)
  1073. maxsize = n;
  1074. else
  1075. npages = DIV_ROUND_UP(maxsize + *start, PAGE_SIZE);
  1076. p = get_pages_array(npages);
  1077. if (!p)
  1078. return -ENOMEM;
  1079. n = __pipe_get_pages(i, maxsize, p, idx, start);
  1080. if (n > 0)
  1081. *pages = p;
  1082. else
  1083. kvfree(p);
  1084. return n;
  1085. }
  1086. ssize_t iov_iter_get_pages_alloc(struct iov_iter *i,
  1087. struct page ***pages, size_t maxsize,
  1088. size_t *start)
  1089. {
  1090. struct page **p;
  1091. if (maxsize > i->count)
  1092. maxsize = i->count;
  1093. if (unlikely(i->type & ITER_PIPE))
  1094. return pipe_get_pages_alloc(i, pages, maxsize, start);
  1095. iterate_all_kinds(i, maxsize, v, ({
  1096. unsigned long addr = (unsigned long)v.iov_base;
  1097. size_t len = v.iov_len + (*start = addr & (PAGE_SIZE - 1));
  1098. int n;
  1099. int res;
  1100. addr &= ~(PAGE_SIZE - 1);
  1101. n = DIV_ROUND_UP(len, PAGE_SIZE);
  1102. p = get_pages_array(n);
  1103. if (!p)
  1104. return -ENOMEM;
  1105. res = get_user_pages_fast(addr, n, (i->type & WRITE) != WRITE, p);
  1106. if (unlikely(res < 0)) {
  1107. kvfree(p);
  1108. return res;
  1109. }
  1110. *pages = p;
  1111. return (res == n ? len : res * PAGE_SIZE) - *start;
  1112. 0;}),({
  1113. /* can't be more than PAGE_SIZE */
  1114. *start = v.bv_offset;
  1115. *pages = p = get_pages_array(1);
  1116. if (!p)
  1117. return -ENOMEM;
  1118. get_page(*p = v.bv_page);
  1119. return v.bv_len;
  1120. }),({
  1121. return -EFAULT;
  1122. })
  1123. )
  1124. return 0;
  1125. }
  1126. EXPORT_SYMBOL(iov_iter_get_pages_alloc);
  1127. size_t csum_and_copy_from_iter(void *addr, size_t bytes, __wsum *csum,
  1128. struct iov_iter *i)
  1129. {
  1130. char *to = addr;
  1131. __wsum sum, next;
  1132. size_t off = 0;
  1133. sum = *csum;
  1134. if (unlikely(i->type & ITER_PIPE)) {
  1135. WARN_ON(1);
  1136. return 0;
  1137. }
  1138. iterate_and_advance(i, bytes, v, ({
  1139. int err = 0;
  1140. next = csum_and_copy_from_user(v.iov_base,
  1141. (to += v.iov_len) - v.iov_len,
  1142. v.iov_len, 0, &err);
  1143. if (!err) {
  1144. sum = csum_block_add(sum, next, off);
  1145. off += v.iov_len;
  1146. }
  1147. err ? v.iov_len : 0;
  1148. }), ({
  1149. char *p = kmap_atomic(v.bv_page);
  1150. next = csum_partial_copy_nocheck(p + v.bv_offset,
  1151. (to += v.bv_len) - v.bv_len,
  1152. v.bv_len, 0);
  1153. kunmap_atomic(p);
  1154. sum = csum_block_add(sum, next, off);
  1155. off += v.bv_len;
  1156. }),({
  1157. next = csum_partial_copy_nocheck(v.iov_base,
  1158. (to += v.iov_len) - v.iov_len,
  1159. v.iov_len, 0);
  1160. sum = csum_block_add(sum, next, off);
  1161. off += v.iov_len;
  1162. })
  1163. )
  1164. *csum = sum;
  1165. return bytes;
  1166. }
  1167. EXPORT_SYMBOL(csum_and_copy_from_iter);
  1168. bool csum_and_copy_from_iter_full(void *addr, size_t bytes, __wsum *csum,
  1169. struct iov_iter *i)
  1170. {
  1171. char *to = addr;
  1172. __wsum sum, next;
  1173. size_t off = 0;
  1174. sum = *csum;
  1175. if (unlikely(i->type & ITER_PIPE)) {
  1176. WARN_ON(1);
  1177. return false;
  1178. }
  1179. if (unlikely(i->count < bytes))
  1180. return false;
  1181. iterate_all_kinds(i, bytes, v, ({
  1182. int err = 0;
  1183. next = csum_and_copy_from_user(v.iov_base,
  1184. (to += v.iov_len) - v.iov_len,
  1185. v.iov_len, 0, &err);
  1186. if (err)
  1187. return false;
  1188. sum = csum_block_add(sum, next, off);
  1189. off += v.iov_len;
  1190. 0;
  1191. }), ({
  1192. char *p = kmap_atomic(v.bv_page);
  1193. next = csum_partial_copy_nocheck(p + v.bv_offset,
  1194. (to += v.bv_len) - v.bv_len,
  1195. v.bv_len, 0);
  1196. kunmap_atomic(p);
  1197. sum = csum_block_add(sum, next, off);
  1198. off += v.bv_len;
  1199. }),({
  1200. next = csum_partial_copy_nocheck(v.iov_base,
  1201. (to += v.iov_len) - v.iov_len,
  1202. v.iov_len, 0);
  1203. sum = csum_block_add(sum, next, off);
  1204. off += v.iov_len;
  1205. })
  1206. )
  1207. *csum = sum;
  1208. iov_iter_advance(i, bytes);
  1209. return true;
  1210. }
  1211. EXPORT_SYMBOL(csum_and_copy_from_iter_full);
  1212. size_t csum_and_copy_to_iter(const void *addr, size_t bytes, __wsum *csum,
  1213. struct iov_iter *i)
  1214. {
  1215. const char *from = addr;
  1216. __wsum sum, next;
  1217. size_t off = 0;
  1218. sum = *csum;
  1219. if (unlikely(i->type & ITER_PIPE)) {
  1220. WARN_ON(1); /* for now */
  1221. return 0;
  1222. }
  1223. iterate_and_advance(i, bytes, v, ({
  1224. int err = 0;
  1225. next = csum_and_copy_to_user((from += v.iov_len) - v.iov_len,
  1226. v.iov_base,
  1227. v.iov_len, 0, &err);
  1228. if (!err) {
  1229. sum = csum_block_add(sum, next, off);
  1230. off += v.iov_len;
  1231. }
  1232. err ? v.iov_len : 0;
  1233. }), ({
  1234. char *p = kmap_atomic(v.bv_page);
  1235. next = csum_partial_copy_nocheck((from += v.bv_len) - v.bv_len,
  1236. p + v.bv_offset,
  1237. v.bv_len, 0);
  1238. kunmap_atomic(p);
  1239. sum = csum_block_add(sum, next, off);
  1240. off += v.bv_len;
  1241. }),({
  1242. next = csum_partial_copy_nocheck((from += v.iov_len) - v.iov_len,
  1243. v.iov_base,
  1244. v.iov_len, 0);
  1245. sum = csum_block_add(sum, next, off);
  1246. off += v.iov_len;
  1247. })
  1248. )
  1249. *csum = sum;
  1250. return bytes;
  1251. }
  1252. EXPORT_SYMBOL(csum_and_copy_to_iter);
  1253. int iov_iter_npages(const struct iov_iter *i, int maxpages)
  1254. {
  1255. size_t size = i->count;
  1256. int npages = 0;
  1257. if (!size)
  1258. return 0;
  1259. if (unlikely(i->type & ITER_PIPE)) {
  1260. struct pipe_inode_info *pipe = i->pipe;
  1261. size_t off;
  1262. int idx;
  1263. if (!sanity(i))
  1264. return 0;
  1265. data_start(i, &idx, &off);
  1266. /* some of this one + all after this one */
  1267. npages = ((pipe->curbuf - idx - 1) & (pipe->buffers - 1)) + 1;
  1268. if (npages >= maxpages)
  1269. return maxpages;
  1270. } else iterate_all_kinds(i, size, v, ({
  1271. unsigned long p = (unsigned long)v.iov_base;
  1272. npages += DIV_ROUND_UP(p + v.iov_len, PAGE_SIZE)
  1273. - p / PAGE_SIZE;
  1274. if (npages >= maxpages)
  1275. return maxpages;
  1276. 0;}),({
  1277. npages++;
  1278. if (npages >= maxpages)
  1279. return maxpages;
  1280. }),({
  1281. unsigned long p = (unsigned long)v.iov_base;
  1282. npages += DIV_ROUND_UP(p + v.iov_len, PAGE_SIZE)
  1283. - p / PAGE_SIZE;
  1284. if (npages >= maxpages)
  1285. return maxpages;
  1286. })
  1287. )
  1288. return npages;
  1289. }
  1290. EXPORT_SYMBOL(iov_iter_npages);
  1291. const void *dup_iter(struct iov_iter *new, struct iov_iter *old, gfp_t flags)
  1292. {
  1293. *new = *old;
  1294. if (unlikely(new->type & ITER_PIPE)) {
  1295. WARN_ON(1);
  1296. return NULL;
  1297. }
  1298. if (new->type & ITER_BVEC)
  1299. return new->bvec = kmemdup(new->bvec,
  1300. new->nr_segs * sizeof(struct bio_vec),
  1301. flags);
  1302. else
  1303. /* iovec and kvec have identical layout */
  1304. return new->iov = kmemdup(new->iov,
  1305. new->nr_segs * sizeof(struct iovec),
  1306. flags);
  1307. }
  1308. EXPORT_SYMBOL(dup_iter);
  1309. /**
  1310. * import_iovec() - Copy an array of &struct iovec from userspace
  1311. * into the kernel, check that it is valid, and initialize a new
  1312. * &struct iov_iter iterator to access it.
  1313. *
  1314. * @type: One of %READ or %WRITE.
  1315. * @uvector: Pointer to the userspace array.
  1316. * @nr_segs: Number of elements in userspace array.
  1317. * @fast_segs: Number of elements in @iov.
  1318. * @iov: (input and output parameter) Pointer to pointer to (usually small
  1319. * on-stack) kernel array.
  1320. * @i: Pointer to iterator that will be initialized on success.
  1321. *
  1322. * If the array pointed to by *@iov is large enough to hold all @nr_segs,
  1323. * then this function places %NULL in *@iov on return. Otherwise, a new
  1324. * array will be allocated and the result placed in *@iov. This means that
  1325. * the caller may call kfree() on *@iov regardless of whether the small
  1326. * on-stack array was used or not (and regardless of whether this function
  1327. * returns an error or not).
  1328. *
  1329. * Return: 0 on success or negative error code on error.
  1330. */
  1331. int import_iovec(int type, const struct iovec __user * uvector,
  1332. unsigned nr_segs, unsigned fast_segs,
  1333. struct iovec **iov, struct iov_iter *i)
  1334. {
  1335. ssize_t n;
  1336. struct iovec *p;
  1337. n = rw_copy_check_uvector(type, uvector, nr_segs, fast_segs,
  1338. *iov, &p);
  1339. if (n < 0) {
  1340. if (p != *iov)
  1341. kfree(p);
  1342. *iov = NULL;
  1343. return n;
  1344. }
  1345. iov_iter_init(i, type, p, nr_segs, n);
  1346. *iov = p == *iov ? NULL : p;
  1347. return 0;
  1348. }
  1349. EXPORT_SYMBOL(import_iovec);
  1350. #ifdef CONFIG_COMPAT
  1351. #include <linux/compat.h>
  1352. int compat_import_iovec(int type, const struct compat_iovec __user * uvector,
  1353. unsigned nr_segs, unsigned fast_segs,
  1354. struct iovec **iov, struct iov_iter *i)
  1355. {
  1356. ssize_t n;
  1357. struct iovec *p;
  1358. n = compat_rw_copy_check_uvector(type, uvector, nr_segs, fast_segs,
  1359. *iov, &p);
  1360. if (n < 0) {
  1361. if (p != *iov)
  1362. kfree(p);
  1363. *iov = NULL;
  1364. return n;
  1365. }
  1366. iov_iter_init(i, type, p, nr_segs, n);
  1367. *iov = p == *iov ? NULL : p;
  1368. return 0;
  1369. }
  1370. #endif
  1371. int import_single_range(int rw, void __user *buf, size_t len,
  1372. struct iovec *iov, struct iov_iter *i)
  1373. {
  1374. if (len > MAX_RW_COUNT)
  1375. len = MAX_RW_COUNT;
  1376. if (unlikely(!access_ok(!rw, buf, len)))
  1377. return -EFAULT;
  1378. iov->iov_base = buf;
  1379. iov->iov_len = len;
  1380. iov_iter_init(i, rw, iov, 1, len);
  1381. return 0;
  1382. }
  1383. EXPORT_SYMBOL(import_single_range);
  1384. int iov_iter_for_each_range(struct iov_iter *i, size_t bytes,
  1385. int (*f)(struct kvec *vec, void *context),
  1386. void *context)
  1387. {
  1388. struct kvec w;
  1389. int err = -EINVAL;
  1390. if (!bytes)
  1391. return 0;
  1392. iterate_all_kinds(i, bytes, v, -EINVAL, ({
  1393. w.iov_base = kmap(v.bv_page) + v.bv_offset;
  1394. w.iov_len = v.bv_len;
  1395. err = f(&w, context);
  1396. kunmap(v.bv_page);
  1397. err;}), ({
  1398. w = v;
  1399. err = f(&w, context);})
  1400. )
  1401. return err;
  1402. }
  1403. EXPORT_SYMBOL(iov_iter_for_each_range);