devmem_is_allowed.c 705 B

12345678910111213141516171819202122232425262728
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * A generic version of devmem_is_allowed.
  4. *
  5. * Based on arch/arm64/mm/mmap.c
  6. *
  7. * Copyright (C) 2020 Google, Inc.
  8. * Copyright (C) 2012 ARM Ltd.
  9. */
  10. #include <linux/mm.h>
  11. #include <linux/ioport.h>
  12. #include <linux/io.h>
  13. /*
  14. * devmem_is_allowed() checks to see if /dev/mem access to a certain address
  15. * is valid. The argument is a physical page number. We mimic x86 here by
  16. * disallowing access to system RAM as well as device-exclusive MMIO regions.
  17. * This effectively disable read()/write() on /dev/mem.
  18. */
  19. int devmem_is_allowed(unsigned long pfn)
  20. {
  21. if (iomem_is_exclusive(PFN_PHYS(pfn)))
  22. return 0;
  23. if (!page_is_ram(pfn))
  24. return 1;
  25. return 0;
  26. }