iov_iter.c 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470
  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. size_t _copy_from_iter(void *addr, size_t bytes, struct iov_iter *i)
  526. {
  527. char *to = addr;
  528. if (unlikely(i->type & ITER_PIPE)) {
  529. WARN_ON(1);
  530. return 0;
  531. }
  532. if (iter_is_iovec(i))
  533. might_fault();
  534. iterate_and_advance(i, bytes, v,
  535. copyin((to += v.iov_len) - v.iov_len, v.iov_base, v.iov_len),
  536. memcpy_from_page((to += v.bv_len) - v.bv_len, v.bv_page,
  537. v.bv_offset, v.bv_len),
  538. memcpy((to += v.iov_len) - v.iov_len, v.iov_base, v.iov_len)
  539. )
  540. return bytes;
  541. }
  542. EXPORT_SYMBOL(_copy_from_iter);
  543. bool _copy_from_iter_full(void *addr, size_t bytes, struct iov_iter *i)
  544. {
  545. char *to = addr;
  546. if (unlikely(i->type & ITER_PIPE)) {
  547. WARN_ON(1);
  548. return false;
  549. }
  550. if (unlikely(i->count < bytes))
  551. return false;
  552. if (iter_is_iovec(i))
  553. might_fault();
  554. iterate_all_kinds(i, bytes, v, ({
  555. if (copyin((to += v.iov_len) - v.iov_len,
  556. v.iov_base, v.iov_len))
  557. return false;
  558. 0;}),
  559. memcpy_from_page((to += v.bv_len) - v.bv_len, v.bv_page,
  560. v.bv_offset, v.bv_len),
  561. memcpy((to += v.iov_len) - v.iov_len, v.iov_base, v.iov_len)
  562. )
  563. iov_iter_advance(i, bytes);
  564. return true;
  565. }
  566. EXPORT_SYMBOL(_copy_from_iter_full);
  567. size_t _copy_from_iter_nocache(void *addr, size_t bytes, struct iov_iter *i)
  568. {
  569. char *to = addr;
  570. if (unlikely(i->type & ITER_PIPE)) {
  571. WARN_ON(1);
  572. return 0;
  573. }
  574. iterate_and_advance(i, bytes, v,
  575. __copy_from_user_inatomic_nocache((to += v.iov_len) - v.iov_len,
  576. v.iov_base, v.iov_len),
  577. memcpy_from_page((to += v.bv_len) - v.bv_len, v.bv_page,
  578. v.bv_offset, v.bv_len),
  579. memcpy((to += v.iov_len) - v.iov_len, v.iov_base, v.iov_len)
  580. )
  581. return bytes;
  582. }
  583. EXPORT_SYMBOL(_copy_from_iter_nocache);
  584. #ifdef CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE
  585. size_t _copy_from_iter_flushcache(void *addr, size_t bytes, struct iov_iter *i)
  586. {
  587. char *to = addr;
  588. if (unlikely(i->type & ITER_PIPE)) {
  589. WARN_ON(1);
  590. return 0;
  591. }
  592. iterate_and_advance(i, bytes, v,
  593. __copy_from_user_flushcache((to += v.iov_len) - v.iov_len,
  594. v.iov_base, v.iov_len),
  595. memcpy_page_flushcache((to += v.bv_len) - v.bv_len, v.bv_page,
  596. v.bv_offset, v.bv_len),
  597. memcpy_flushcache((to += v.iov_len) - v.iov_len, v.iov_base,
  598. v.iov_len)
  599. )
  600. return bytes;
  601. }
  602. EXPORT_SYMBOL_GPL(_copy_from_iter_flushcache);
  603. #endif
  604. bool _copy_from_iter_full_nocache(void *addr, size_t bytes, struct iov_iter *i)
  605. {
  606. char *to = addr;
  607. if (unlikely(i->type & ITER_PIPE)) {
  608. WARN_ON(1);
  609. return false;
  610. }
  611. if (unlikely(i->count < bytes))
  612. return false;
  613. iterate_all_kinds(i, bytes, v, ({
  614. if (__copy_from_user_inatomic_nocache((to += v.iov_len) - v.iov_len,
  615. v.iov_base, v.iov_len))
  616. return false;
  617. 0;}),
  618. memcpy_from_page((to += v.bv_len) - v.bv_len, v.bv_page,
  619. v.bv_offset, v.bv_len),
  620. memcpy((to += v.iov_len) - v.iov_len, v.iov_base, v.iov_len)
  621. )
  622. iov_iter_advance(i, bytes);
  623. return true;
  624. }
  625. EXPORT_SYMBOL(_copy_from_iter_full_nocache);
  626. static inline bool page_copy_sane(struct page *page, size_t offset, size_t n)
  627. {
  628. struct page *head = compound_head(page);
  629. size_t v = n + offset + page_address(page) - page_address(head);
  630. if (likely(n <= v && v <= (PAGE_SIZE << compound_order(head))))
  631. return true;
  632. WARN_ON(1);
  633. return false;
  634. }
  635. size_t copy_page_to_iter(struct page *page, size_t offset, size_t bytes,
  636. struct iov_iter *i)
  637. {
  638. if (unlikely(!page_copy_sane(page, offset, bytes)))
  639. return 0;
  640. if (i->type & (ITER_BVEC|ITER_KVEC)) {
  641. void *kaddr = kmap_atomic(page);
  642. size_t wanted = copy_to_iter(kaddr + offset, bytes, i);
  643. kunmap_atomic(kaddr);
  644. return wanted;
  645. } else if (likely(!(i->type & ITER_PIPE)))
  646. return copy_page_to_iter_iovec(page, offset, bytes, i);
  647. else
  648. return copy_page_to_iter_pipe(page, offset, bytes, i);
  649. }
  650. EXPORT_SYMBOL(copy_page_to_iter);
  651. size_t copy_page_from_iter(struct page *page, size_t offset, size_t bytes,
  652. struct iov_iter *i)
  653. {
  654. if (unlikely(!page_copy_sane(page, offset, bytes)))
  655. return 0;
  656. if (unlikely(i->type & ITER_PIPE)) {
  657. WARN_ON(1);
  658. return 0;
  659. }
  660. if (i->type & (ITER_BVEC|ITER_KVEC)) {
  661. void *kaddr = kmap_atomic(page);
  662. size_t wanted = _copy_from_iter(kaddr + offset, bytes, i);
  663. kunmap_atomic(kaddr);
  664. return wanted;
  665. } else
  666. return copy_page_from_iter_iovec(page, offset, bytes, i);
  667. }
  668. EXPORT_SYMBOL(copy_page_from_iter);
  669. static size_t pipe_zero(size_t bytes, struct iov_iter *i)
  670. {
  671. struct pipe_inode_info *pipe = i->pipe;
  672. size_t n, off;
  673. int idx;
  674. if (!sanity(i))
  675. return 0;
  676. bytes = n = push_pipe(i, bytes, &idx, &off);
  677. if (unlikely(!n))
  678. return 0;
  679. for ( ; n; idx = next_idx(idx, pipe), off = 0) {
  680. size_t chunk = min_t(size_t, n, PAGE_SIZE - off);
  681. memzero_page(pipe->bufs[idx].page, off, chunk);
  682. i->idx = idx;
  683. i->iov_offset = off + chunk;
  684. n -= chunk;
  685. }
  686. i->count -= bytes;
  687. return bytes;
  688. }
  689. size_t iov_iter_zero(size_t bytes, struct iov_iter *i)
  690. {
  691. if (unlikely(i->type & ITER_PIPE))
  692. return pipe_zero(bytes, i);
  693. iterate_and_advance(i, bytes, v,
  694. clear_user(v.iov_base, v.iov_len),
  695. memzero_page(v.bv_page, v.bv_offset, v.bv_len),
  696. memset(v.iov_base, 0, v.iov_len)
  697. )
  698. return bytes;
  699. }
  700. EXPORT_SYMBOL(iov_iter_zero);
  701. size_t iov_iter_copy_from_user_atomic(struct page *page,
  702. struct iov_iter *i, unsigned long offset, size_t bytes)
  703. {
  704. char *kaddr = kmap_atomic(page), *p = kaddr + offset;
  705. if (unlikely(!page_copy_sane(page, offset, bytes))) {
  706. kunmap_atomic(kaddr);
  707. return 0;
  708. }
  709. if (unlikely(i->type & ITER_PIPE)) {
  710. kunmap_atomic(kaddr);
  711. WARN_ON(1);
  712. return 0;
  713. }
  714. iterate_all_kinds(i, bytes, v,
  715. copyin((p += v.iov_len) - v.iov_len, v.iov_base, v.iov_len),
  716. memcpy_from_page((p += v.bv_len) - v.bv_len, v.bv_page,
  717. v.bv_offset, v.bv_len),
  718. memcpy((p += v.iov_len) - v.iov_len, v.iov_base, v.iov_len)
  719. )
  720. kunmap_atomic(kaddr);
  721. return bytes;
  722. }
  723. EXPORT_SYMBOL(iov_iter_copy_from_user_atomic);
  724. static inline void pipe_truncate(struct iov_iter *i)
  725. {
  726. struct pipe_inode_info *pipe = i->pipe;
  727. if (pipe->nrbufs) {
  728. size_t off = i->iov_offset;
  729. int idx = i->idx;
  730. int nrbufs = (idx - pipe->curbuf) & (pipe->buffers - 1);
  731. if (off) {
  732. pipe->bufs[idx].len = off - pipe->bufs[idx].offset;
  733. idx = next_idx(idx, pipe);
  734. nrbufs++;
  735. }
  736. while (pipe->nrbufs > nrbufs) {
  737. pipe_buf_release(pipe, &pipe->bufs[idx]);
  738. idx = next_idx(idx, pipe);
  739. pipe->nrbufs--;
  740. }
  741. }
  742. }
  743. static void pipe_advance(struct iov_iter *i, size_t size)
  744. {
  745. struct pipe_inode_info *pipe = i->pipe;
  746. if (unlikely(i->count < size))
  747. size = i->count;
  748. if (size) {
  749. struct pipe_buffer *buf;
  750. size_t off = i->iov_offset, left = size;
  751. int idx = i->idx;
  752. if (off) /* make it relative to the beginning of buffer */
  753. left += off - pipe->bufs[idx].offset;
  754. while (1) {
  755. buf = &pipe->bufs[idx];
  756. if (left <= buf->len)
  757. break;
  758. left -= buf->len;
  759. idx = next_idx(idx, pipe);
  760. }
  761. i->idx = idx;
  762. i->iov_offset = buf->offset + left;
  763. }
  764. i->count -= size;
  765. /* ... and discard everything past that point */
  766. pipe_truncate(i);
  767. }
  768. void iov_iter_advance(struct iov_iter *i, size_t size)
  769. {
  770. if (unlikely(i->type & ITER_PIPE)) {
  771. pipe_advance(i, size);
  772. return;
  773. }
  774. iterate_and_advance(i, size, v, 0, 0, 0)
  775. }
  776. EXPORT_SYMBOL(iov_iter_advance);
  777. void iov_iter_revert(struct iov_iter *i, size_t unroll)
  778. {
  779. if (!unroll)
  780. return;
  781. if (WARN_ON(unroll > MAX_RW_COUNT))
  782. return;
  783. i->count += unroll;
  784. if (unlikely(i->type & ITER_PIPE)) {
  785. struct pipe_inode_info *pipe = i->pipe;
  786. int idx = i->idx;
  787. size_t off = i->iov_offset;
  788. while (1) {
  789. size_t n = off - pipe->bufs[idx].offset;
  790. if (unroll < n) {
  791. off -= unroll;
  792. break;
  793. }
  794. unroll -= n;
  795. if (!unroll && idx == i->start_idx) {
  796. off = 0;
  797. break;
  798. }
  799. if (!idx--)
  800. idx = pipe->buffers - 1;
  801. off = pipe->bufs[idx].offset + pipe->bufs[idx].len;
  802. }
  803. i->iov_offset = off;
  804. i->idx = idx;
  805. pipe_truncate(i);
  806. return;
  807. }
  808. if (unroll <= i->iov_offset) {
  809. i->iov_offset -= unroll;
  810. return;
  811. }
  812. unroll -= i->iov_offset;
  813. if (i->type & ITER_BVEC) {
  814. const struct bio_vec *bvec = i->bvec;
  815. while (1) {
  816. size_t n = (--bvec)->bv_len;
  817. i->nr_segs++;
  818. if (unroll <= n) {
  819. i->bvec = bvec;
  820. i->iov_offset = n - unroll;
  821. return;
  822. }
  823. unroll -= n;
  824. }
  825. } else { /* same logics for iovec and kvec */
  826. const struct iovec *iov = i->iov;
  827. while (1) {
  828. size_t n = (--iov)->iov_len;
  829. i->nr_segs++;
  830. if (unroll <= n) {
  831. i->iov = iov;
  832. i->iov_offset = n - unroll;
  833. return;
  834. }
  835. unroll -= n;
  836. }
  837. }
  838. }
  839. EXPORT_SYMBOL(iov_iter_revert);
  840. /*
  841. * Return the count of just the current iov_iter segment.
  842. */
  843. size_t iov_iter_single_seg_count(const struct iov_iter *i)
  844. {
  845. if (unlikely(i->type & ITER_PIPE))
  846. return i->count; // it is a silly place, anyway
  847. if (i->nr_segs == 1)
  848. return i->count;
  849. else if (i->type & ITER_BVEC)
  850. return min(i->count, i->bvec->bv_len - i->iov_offset);
  851. else
  852. return min(i->count, i->iov->iov_len - i->iov_offset);
  853. }
  854. EXPORT_SYMBOL(iov_iter_single_seg_count);
  855. void iov_iter_kvec(struct iov_iter *i, int direction,
  856. const struct kvec *kvec, unsigned long nr_segs,
  857. size_t count)
  858. {
  859. BUG_ON(!(direction & ITER_KVEC));
  860. i->type = direction;
  861. i->kvec = kvec;
  862. i->nr_segs = nr_segs;
  863. i->iov_offset = 0;
  864. i->count = count;
  865. }
  866. EXPORT_SYMBOL(iov_iter_kvec);
  867. void iov_iter_bvec(struct iov_iter *i, int direction,
  868. const struct bio_vec *bvec, unsigned long nr_segs,
  869. size_t count)
  870. {
  871. BUG_ON(!(direction & ITER_BVEC));
  872. i->type = direction;
  873. i->bvec = bvec;
  874. i->nr_segs = nr_segs;
  875. i->iov_offset = 0;
  876. i->count = count;
  877. }
  878. EXPORT_SYMBOL(iov_iter_bvec);
  879. void iov_iter_pipe(struct iov_iter *i, int direction,
  880. struct pipe_inode_info *pipe,
  881. size_t count)
  882. {
  883. BUG_ON(direction != ITER_PIPE);
  884. WARN_ON(pipe->nrbufs == pipe->buffers);
  885. i->type = direction;
  886. i->pipe = pipe;
  887. i->idx = (pipe->curbuf + pipe->nrbufs) & (pipe->buffers - 1);
  888. i->iov_offset = 0;
  889. i->count = count;
  890. i->start_idx = i->idx;
  891. }
  892. EXPORT_SYMBOL(iov_iter_pipe);
  893. unsigned long iov_iter_alignment(const struct iov_iter *i)
  894. {
  895. unsigned long res = 0;
  896. size_t size = i->count;
  897. if (unlikely(i->type & ITER_PIPE)) {
  898. if (size && i->iov_offset && allocated(&i->pipe->bufs[i->idx]))
  899. return size | i->iov_offset;
  900. return size;
  901. }
  902. iterate_all_kinds(i, size, v,
  903. (res |= (unsigned long)v.iov_base | v.iov_len, 0),
  904. res |= v.bv_offset | v.bv_len,
  905. res |= (unsigned long)v.iov_base | v.iov_len
  906. )
  907. return res;
  908. }
  909. EXPORT_SYMBOL(iov_iter_alignment);
  910. unsigned long iov_iter_gap_alignment(const struct iov_iter *i)
  911. {
  912. unsigned long res = 0;
  913. size_t size = i->count;
  914. if (unlikely(i->type & ITER_PIPE)) {
  915. WARN_ON(1);
  916. return ~0U;
  917. }
  918. iterate_all_kinds(i, size, v,
  919. (res |= (!res ? 0 : (unsigned long)v.iov_base) |
  920. (size != v.iov_len ? size : 0), 0),
  921. (res |= (!res ? 0 : (unsigned long)v.bv_offset) |
  922. (size != v.bv_len ? size : 0)),
  923. (res |= (!res ? 0 : (unsigned long)v.iov_base) |
  924. (size != v.iov_len ? size : 0))
  925. );
  926. return res;
  927. }
  928. EXPORT_SYMBOL(iov_iter_gap_alignment);
  929. static inline size_t __pipe_get_pages(struct iov_iter *i,
  930. size_t maxsize,
  931. struct page **pages,
  932. int idx,
  933. size_t *start)
  934. {
  935. struct pipe_inode_info *pipe = i->pipe;
  936. ssize_t n = push_pipe(i, maxsize, &idx, start);
  937. if (!n)
  938. return -EFAULT;
  939. maxsize = n;
  940. n += *start;
  941. while (n > 0) {
  942. get_page(*pages++ = pipe->bufs[idx].page);
  943. idx = next_idx(idx, pipe);
  944. n -= PAGE_SIZE;
  945. }
  946. return maxsize;
  947. }
  948. static ssize_t pipe_get_pages(struct iov_iter *i,
  949. struct page **pages, size_t maxsize, unsigned maxpages,
  950. size_t *start)
  951. {
  952. unsigned npages;
  953. size_t capacity;
  954. int idx;
  955. if (!maxsize)
  956. return 0;
  957. if (!sanity(i))
  958. return -EFAULT;
  959. data_start(i, &idx, start);
  960. /* some of this one + all after this one */
  961. npages = ((i->pipe->curbuf - idx - 1) & (i->pipe->buffers - 1)) + 1;
  962. capacity = min(npages,maxpages) * PAGE_SIZE - *start;
  963. return __pipe_get_pages(i, min(maxsize, capacity), pages, idx, start);
  964. }
  965. ssize_t iov_iter_get_pages(struct iov_iter *i,
  966. struct page **pages, size_t maxsize, unsigned maxpages,
  967. size_t *start)
  968. {
  969. if (maxsize > i->count)
  970. maxsize = i->count;
  971. if (unlikely(i->type & ITER_PIPE))
  972. return pipe_get_pages(i, pages, maxsize, maxpages, start);
  973. iterate_all_kinds(i, maxsize, v, ({
  974. unsigned long addr = (unsigned long)v.iov_base;
  975. size_t len = v.iov_len + (*start = addr & (PAGE_SIZE - 1));
  976. int n;
  977. int res;
  978. if (len > maxpages * PAGE_SIZE)
  979. len = maxpages * PAGE_SIZE;
  980. addr &= ~(PAGE_SIZE - 1);
  981. n = DIV_ROUND_UP(len, PAGE_SIZE);
  982. res = get_user_pages_fast(addr, n, (i->type & WRITE) != WRITE, pages);
  983. if (unlikely(res < 0))
  984. return res;
  985. return (res == n ? len : res * PAGE_SIZE) - *start;
  986. 0;}),({
  987. /* can't be more than PAGE_SIZE */
  988. *start = v.bv_offset;
  989. get_page(*pages = v.bv_page);
  990. return v.bv_len;
  991. }),({
  992. return -EFAULT;
  993. })
  994. )
  995. return 0;
  996. }
  997. EXPORT_SYMBOL(iov_iter_get_pages);
  998. static struct page **get_pages_array(size_t n)
  999. {
  1000. return kvmalloc_array(n, sizeof(struct page *), GFP_KERNEL);
  1001. }
  1002. static ssize_t pipe_get_pages_alloc(struct iov_iter *i,
  1003. struct page ***pages, size_t maxsize,
  1004. size_t *start)
  1005. {
  1006. struct page **p;
  1007. size_t n;
  1008. int idx;
  1009. int npages;
  1010. if (!maxsize)
  1011. return 0;
  1012. if (!sanity(i))
  1013. return -EFAULT;
  1014. data_start(i, &idx, start);
  1015. /* some of this one + all after this one */
  1016. npages = ((i->pipe->curbuf - idx - 1) & (i->pipe->buffers - 1)) + 1;
  1017. n = npages * PAGE_SIZE - *start;
  1018. if (maxsize > n)
  1019. maxsize = n;
  1020. else
  1021. npages = DIV_ROUND_UP(maxsize + *start, PAGE_SIZE);
  1022. p = get_pages_array(npages);
  1023. if (!p)
  1024. return -ENOMEM;
  1025. n = __pipe_get_pages(i, maxsize, p, idx, start);
  1026. if (n > 0)
  1027. *pages = p;
  1028. else
  1029. kvfree(p);
  1030. return n;
  1031. }
  1032. ssize_t iov_iter_get_pages_alloc(struct iov_iter *i,
  1033. struct page ***pages, size_t maxsize,
  1034. size_t *start)
  1035. {
  1036. struct page **p;
  1037. if (maxsize > i->count)
  1038. maxsize = i->count;
  1039. if (unlikely(i->type & ITER_PIPE))
  1040. return pipe_get_pages_alloc(i, pages, maxsize, start);
  1041. iterate_all_kinds(i, maxsize, v, ({
  1042. unsigned long addr = (unsigned long)v.iov_base;
  1043. size_t len = v.iov_len + (*start = addr & (PAGE_SIZE - 1));
  1044. int n;
  1045. int res;
  1046. addr &= ~(PAGE_SIZE - 1);
  1047. n = DIV_ROUND_UP(len, PAGE_SIZE);
  1048. p = get_pages_array(n);
  1049. if (!p)
  1050. return -ENOMEM;
  1051. res = get_user_pages_fast(addr, n, (i->type & WRITE) != WRITE, p);
  1052. if (unlikely(res < 0)) {
  1053. kvfree(p);
  1054. return res;
  1055. }
  1056. *pages = p;
  1057. return (res == n ? len : res * PAGE_SIZE) - *start;
  1058. 0;}),({
  1059. /* can't be more than PAGE_SIZE */
  1060. *start = v.bv_offset;
  1061. *pages = p = get_pages_array(1);
  1062. if (!p)
  1063. return -ENOMEM;
  1064. get_page(*p = v.bv_page);
  1065. return v.bv_len;
  1066. }),({
  1067. return -EFAULT;
  1068. })
  1069. )
  1070. return 0;
  1071. }
  1072. EXPORT_SYMBOL(iov_iter_get_pages_alloc);
  1073. size_t csum_and_copy_from_iter(void *addr, size_t bytes, __wsum *csum,
  1074. struct iov_iter *i)
  1075. {
  1076. char *to = addr;
  1077. __wsum sum, next;
  1078. size_t off = 0;
  1079. sum = *csum;
  1080. if (unlikely(i->type & ITER_PIPE)) {
  1081. WARN_ON(1);
  1082. return 0;
  1083. }
  1084. iterate_and_advance(i, bytes, v, ({
  1085. int err = 0;
  1086. next = csum_and_copy_from_user(v.iov_base,
  1087. (to += v.iov_len) - v.iov_len,
  1088. v.iov_len, 0, &err);
  1089. if (!err) {
  1090. sum = csum_block_add(sum, next, off);
  1091. off += v.iov_len;
  1092. }
  1093. err ? v.iov_len : 0;
  1094. }), ({
  1095. char *p = kmap_atomic(v.bv_page);
  1096. next = csum_partial_copy_nocheck(p + v.bv_offset,
  1097. (to += v.bv_len) - v.bv_len,
  1098. v.bv_len, 0);
  1099. kunmap_atomic(p);
  1100. sum = csum_block_add(sum, next, off);
  1101. off += v.bv_len;
  1102. }),({
  1103. next = csum_partial_copy_nocheck(v.iov_base,
  1104. (to += v.iov_len) - v.iov_len,
  1105. v.iov_len, 0);
  1106. sum = csum_block_add(sum, next, off);
  1107. off += v.iov_len;
  1108. })
  1109. )
  1110. *csum = sum;
  1111. return bytes;
  1112. }
  1113. EXPORT_SYMBOL(csum_and_copy_from_iter);
  1114. bool csum_and_copy_from_iter_full(void *addr, size_t bytes, __wsum *csum,
  1115. struct iov_iter *i)
  1116. {
  1117. char *to = addr;
  1118. __wsum sum, next;
  1119. size_t off = 0;
  1120. sum = *csum;
  1121. if (unlikely(i->type & ITER_PIPE)) {
  1122. WARN_ON(1);
  1123. return false;
  1124. }
  1125. if (unlikely(i->count < bytes))
  1126. return false;
  1127. iterate_all_kinds(i, bytes, v, ({
  1128. int err = 0;
  1129. next = csum_and_copy_from_user(v.iov_base,
  1130. (to += v.iov_len) - v.iov_len,
  1131. v.iov_len, 0, &err);
  1132. if (err)
  1133. return false;
  1134. sum = csum_block_add(sum, next, off);
  1135. off += v.iov_len;
  1136. 0;
  1137. }), ({
  1138. char *p = kmap_atomic(v.bv_page);
  1139. next = csum_partial_copy_nocheck(p + v.bv_offset,
  1140. (to += v.bv_len) - v.bv_len,
  1141. v.bv_len, 0);
  1142. kunmap_atomic(p);
  1143. sum = csum_block_add(sum, next, off);
  1144. off += v.bv_len;
  1145. }),({
  1146. next = csum_partial_copy_nocheck(v.iov_base,
  1147. (to += v.iov_len) - v.iov_len,
  1148. v.iov_len, 0);
  1149. sum = csum_block_add(sum, next, off);
  1150. off += v.iov_len;
  1151. })
  1152. )
  1153. *csum = sum;
  1154. iov_iter_advance(i, bytes);
  1155. return true;
  1156. }
  1157. EXPORT_SYMBOL(csum_and_copy_from_iter_full);
  1158. size_t csum_and_copy_to_iter(const void *addr, size_t bytes, __wsum *csum,
  1159. struct iov_iter *i)
  1160. {
  1161. const char *from = addr;
  1162. __wsum sum, next;
  1163. size_t off = 0;
  1164. sum = *csum;
  1165. if (unlikely(i->type & ITER_PIPE)) {
  1166. WARN_ON(1); /* for now */
  1167. return 0;
  1168. }
  1169. iterate_and_advance(i, bytes, v, ({
  1170. int err = 0;
  1171. next = csum_and_copy_to_user((from += v.iov_len) - v.iov_len,
  1172. v.iov_base,
  1173. v.iov_len, 0, &err);
  1174. if (!err) {
  1175. sum = csum_block_add(sum, next, off);
  1176. off += v.iov_len;
  1177. }
  1178. err ? v.iov_len : 0;
  1179. }), ({
  1180. char *p = kmap_atomic(v.bv_page);
  1181. next = csum_partial_copy_nocheck((from += v.bv_len) - v.bv_len,
  1182. p + v.bv_offset,
  1183. v.bv_len, 0);
  1184. kunmap_atomic(p);
  1185. sum = csum_block_add(sum, next, off);
  1186. off += v.bv_len;
  1187. }),({
  1188. next = csum_partial_copy_nocheck((from += v.iov_len) - v.iov_len,
  1189. v.iov_base,
  1190. v.iov_len, 0);
  1191. sum = csum_block_add(sum, next, off);
  1192. off += v.iov_len;
  1193. })
  1194. )
  1195. *csum = sum;
  1196. return bytes;
  1197. }
  1198. EXPORT_SYMBOL(csum_and_copy_to_iter);
  1199. int iov_iter_npages(const struct iov_iter *i, int maxpages)
  1200. {
  1201. size_t size = i->count;
  1202. int npages = 0;
  1203. if (!size)
  1204. return 0;
  1205. if (unlikely(i->type & ITER_PIPE)) {
  1206. struct pipe_inode_info *pipe = i->pipe;
  1207. size_t off;
  1208. int idx;
  1209. if (!sanity(i))
  1210. return 0;
  1211. data_start(i, &idx, &off);
  1212. /* some of this one + all after this one */
  1213. npages = ((pipe->curbuf - idx - 1) & (pipe->buffers - 1)) + 1;
  1214. if (npages >= maxpages)
  1215. return maxpages;
  1216. } else iterate_all_kinds(i, size, v, ({
  1217. unsigned long p = (unsigned long)v.iov_base;
  1218. npages += DIV_ROUND_UP(p + v.iov_len, PAGE_SIZE)
  1219. - p / PAGE_SIZE;
  1220. if (npages >= maxpages)
  1221. return maxpages;
  1222. 0;}),({
  1223. npages++;
  1224. if (npages >= maxpages)
  1225. return maxpages;
  1226. }),({
  1227. unsigned long p = (unsigned long)v.iov_base;
  1228. npages += DIV_ROUND_UP(p + v.iov_len, PAGE_SIZE)
  1229. - p / PAGE_SIZE;
  1230. if (npages >= maxpages)
  1231. return maxpages;
  1232. })
  1233. )
  1234. return npages;
  1235. }
  1236. EXPORT_SYMBOL(iov_iter_npages);
  1237. const void *dup_iter(struct iov_iter *new, struct iov_iter *old, gfp_t flags)
  1238. {
  1239. *new = *old;
  1240. if (unlikely(new->type & ITER_PIPE)) {
  1241. WARN_ON(1);
  1242. return NULL;
  1243. }
  1244. if (new->type & ITER_BVEC)
  1245. return new->bvec = kmemdup(new->bvec,
  1246. new->nr_segs * sizeof(struct bio_vec),
  1247. flags);
  1248. else
  1249. /* iovec and kvec have identical layout */
  1250. return new->iov = kmemdup(new->iov,
  1251. new->nr_segs * sizeof(struct iovec),
  1252. flags);
  1253. }
  1254. EXPORT_SYMBOL(dup_iter);
  1255. /**
  1256. * import_iovec() - Copy an array of &struct iovec from userspace
  1257. * into the kernel, check that it is valid, and initialize a new
  1258. * &struct iov_iter iterator to access it.
  1259. *
  1260. * @type: One of %READ or %WRITE.
  1261. * @uvector: Pointer to the userspace array.
  1262. * @nr_segs: Number of elements in userspace array.
  1263. * @fast_segs: Number of elements in @iov.
  1264. * @iov: (input and output parameter) Pointer to pointer to (usually small
  1265. * on-stack) kernel array.
  1266. * @i: Pointer to iterator that will be initialized on success.
  1267. *
  1268. * If the array pointed to by *@iov is large enough to hold all @nr_segs,
  1269. * then this function places %NULL in *@iov on return. Otherwise, a new
  1270. * array will be allocated and the result placed in *@iov. This means that
  1271. * the caller may call kfree() on *@iov regardless of whether the small
  1272. * on-stack array was used or not (and regardless of whether this function
  1273. * returns an error or not).
  1274. *
  1275. * Return: 0 on success or negative error code on error.
  1276. */
  1277. int import_iovec(int type, const struct iovec __user * uvector,
  1278. unsigned nr_segs, unsigned fast_segs,
  1279. struct iovec **iov, struct iov_iter *i)
  1280. {
  1281. ssize_t n;
  1282. struct iovec *p;
  1283. n = rw_copy_check_uvector(type, uvector, nr_segs, fast_segs,
  1284. *iov, &p);
  1285. if (n < 0) {
  1286. if (p != *iov)
  1287. kfree(p);
  1288. *iov = NULL;
  1289. return n;
  1290. }
  1291. iov_iter_init(i, type, p, nr_segs, n);
  1292. *iov = p == *iov ? NULL : p;
  1293. return 0;
  1294. }
  1295. EXPORT_SYMBOL(import_iovec);
  1296. #ifdef CONFIG_COMPAT
  1297. #include <linux/compat.h>
  1298. int compat_import_iovec(int type, const struct compat_iovec __user * uvector,
  1299. unsigned nr_segs, unsigned fast_segs,
  1300. struct iovec **iov, struct iov_iter *i)
  1301. {
  1302. ssize_t n;
  1303. struct iovec *p;
  1304. n = compat_rw_copy_check_uvector(type, uvector, nr_segs, fast_segs,
  1305. *iov, &p);
  1306. if (n < 0) {
  1307. if (p != *iov)
  1308. kfree(p);
  1309. *iov = NULL;
  1310. return n;
  1311. }
  1312. iov_iter_init(i, type, p, nr_segs, n);
  1313. *iov = p == *iov ? NULL : p;
  1314. return 0;
  1315. }
  1316. #endif
  1317. int import_single_range(int rw, void __user *buf, size_t len,
  1318. struct iovec *iov, struct iov_iter *i)
  1319. {
  1320. if (len > MAX_RW_COUNT)
  1321. len = MAX_RW_COUNT;
  1322. if (unlikely(!access_ok(!rw, buf, len)))
  1323. return -EFAULT;
  1324. iov->iov_base = buf;
  1325. iov->iov_len = len;
  1326. iov_iter_init(i, rw, iov, 1, len);
  1327. return 0;
  1328. }
  1329. EXPORT_SYMBOL(import_single_range);
  1330. int iov_iter_for_each_range(struct iov_iter *i, size_t bytes,
  1331. int (*f)(struct kvec *vec, void *context),
  1332. void *context)
  1333. {
  1334. struct kvec w;
  1335. int err = -EINVAL;
  1336. if (!bytes)
  1337. return 0;
  1338. iterate_all_kinds(i, bytes, v, -EINVAL, ({
  1339. w.iov_base = kmap(v.bv_page) + v.bv_offset;
  1340. w.iov_len = v.bv_len;
  1341. err = f(&w, context);
  1342. kunmap(v.bv_page);
  1343. err;}), ({
  1344. w = v;
  1345. err = f(&w, context);})
  1346. )
  1347. return err;
  1348. }
  1349. EXPORT_SYMBOL(iov_iter_for_each_range);