| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- /* SPDX-License-Identifier: GPL-2.0+ */
- #pragma once
- /*
- * Contains declarations that exist in the kernel which have been CUSTOMISED for
- * testing purposes to faciliate userland VMA testing.
- */
- #ifdef CONFIG_MMU
- extern unsigned long mmap_min_addr;
- extern unsigned long dac_mmap_min_addr;
- #else
- #define mmap_min_addr 0UL
- #define dac_mmap_min_addr 0UL
- #endif
- #define VM_WARN_ON(_expr) (WARN_ON(_expr))
- #define VM_WARN_ON_ONCE(_expr) (WARN_ON_ONCE(_expr))
- #define VM_WARN_ON_VMG(_expr, _vmg) (WARN_ON(_expr))
- #define VM_BUG_ON(_expr) (BUG_ON(_expr))
- #define VM_BUG_ON_VMA(_expr, _vma) (BUG_ON(_expr))
- /* We hardcode this for now. */
- #define sysctl_max_map_count 0x1000000UL
- #define TASK_SIZE ((1ul << 47)-PAGE_SIZE)
- /*
- * The shared stubs do not implement this, it amounts to an fprintf(STDERR,...)
- * either way :)
- */
- #define pr_warn_once pr_err
- #define pgtable_supports_soft_dirty() 1
- struct anon_vma {
- struct anon_vma *root;
- struct rb_root_cached rb_root;
- /* Test fields. */
- bool was_cloned;
- bool was_unlinked;
- };
- static inline void unlink_anon_vmas(struct vm_area_struct *vma)
- {
- /* For testing purposes, indicate that the anon_vma was unlinked. */
- vma->anon_vma->was_unlinked = true;
- }
- static inline void vma_start_write(struct vm_area_struct *vma)
- {
- /* Used to indicate to tests that a write operation has begun. */
- vma->vm_lock_seq++;
- }
- static inline __must_check
- int vma_start_write_killable(struct vm_area_struct *vma)
- {
- /* Used to indicate to tests that a write operation has begun. */
- vma->vm_lock_seq++;
- return 0;
- }
- static inline int anon_vma_clone(struct vm_area_struct *dst, struct vm_area_struct *src,
- enum vma_operation operation)
- {
- /* For testing purposes. We indicate that an anon_vma has been cloned. */
- if (src->anon_vma != NULL) {
- dst->anon_vma = src->anon_vma;
- dst->anon_vma->was_cloned = true;
- }
- return 0;
- }
- static inline int __anon_vma_prepare(struct vm_area_struct *vma)
- {
- struct anon_vma *anon_vma = calloc(1, sizeof(struct anon_vma));
- if (!anon_vma)
- return -ENOMEM;
- anon_vma->root = anon_vma;
- vma->anon_vma = anon_vma;
- return 0;
- }
- static inline int anon_vma_prepare(struct vm_area_struct *vma)
- {
- if (likely(vma->anon_vma))
- return 0;
- return __anon_vma_prepare(vma);
- }
- static inline void vma_lock_init(struct vm_area_struct *vma, bool reset_refcnt)
- {
- if (reset_refcnt)
- refcount_set(&vma->vm_refcnt, 0);
- }
- static inline vma_flags_t __mk_vma_flags(size_t count, const vma_flag_t *bits)
- {
- vma_flags_t flags;
- int i;
- /*
- * For testing purposes: allow invalid bit specification so we can
- * easily test.
- */
- vma_flags_clear_all(&flags);
- for (i = 0; i < count; i++)
- if (bits[i] < NUM_VMA_FLAG_BITS)
- vma_flag_set(&flags, bits[i]);
- return flags;
- }
|