copy_to_user가 올바른 결과를 인쇄하지 않는 이유는 무엇입니까?

user2309636

연결된 사서함 목록이 있고 해당 ID를 userspace 변수에 복사하려고하는데 mbxList올바르게 인쇄되지 않습니다.

asmlinkage long sys_listMailboxes(unsigned long * mbxList,
                    unsigned long K)
{
  int counter = 0;
  MBOX * currentBox;
  unsigned long * toUser;

  list_for_each_entry(currentBox, &mailbox_list, list)
    {
      if(counter != K)
    {
      printk("The id is: %lu\n", currentBox->id);
      toUser = &currentBox->id;
      copy_to_user(mbxList, toUser, sizeof toUser);
      mbxList++;
      counter++;
    }
    }
  return counter;
}

커널에서 프린트를 dmesg확인하면 올바른 출력을 볼 수 있습니다. The id is: 1111하지만 출력을 시도 할 때 사용자 공간에서 출력을 얻습니다. The id is: 1474660693이것은 잘못된 것입니다.

이 시스템 호출을 구현하는 C 코드 조각은 다음과 같습니다.

#include <stdio.h>
#include <unistd.h>
#include <syscall.h>

long listMbox(unsigned long * mbxList, unsigned long K)
{
  return syscall(__NR_listMailboxes, mbxList, K);
}

int main(void)
{
   unsigned long * mbxlist;
   unsigned long K = 2;

   listMailboxes(mbxlist, K);       

   int i;
   for(i = 0; i < K; i++)
   {
      printf("Mailbox id is: %lu\n", *mbxList);
      mbxList++;
   }
}

1474660693매번 같은 번호를 받기 때문에 메모리 주소라고 생각하지 않습니다. 나는 내가 copy_to_user너무 큰 크기로 크기를 주장한다고 생각 했지만 그 이후로는 그렇지 않은 것 같습니다. 나는 무엇이 잘못되었는지 전혀 모른다. 어떤 도움을 주시면 감사하겠습니다. 감사합니다!

잔 링크스

당신이 사용하고있는 것으로 보인다 sizeof toUser커널 부분에서 실제로 데이터 복사 지적 에 의해를 toUser.

그래서 그것은 잘못되었습니다. 포인터 바이트 크기의 int에서 복사하고 있습니다.

sizeof *toUser괄호가 필요할 수도 있지만 사용하는 것이 좋습니다.sizeof(*toUser)

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

내 코드가 올바른 최소 차이를 인쇄하지 않는 이유는 무엇입니까?

분류에서Dev

이 코드가 올바른 결과를 반환하지 않는 이유는 무엇입니까?

분류에서Dev

내 indexOf 값이 올바른 결과를 반환하지 않는 이유는 무엇입니까?

분류에서Dev

OpenMP atomic and critical이 올바른 결과를 제공하지 않는 이유는 무엇입니까?

분류에서Dev

C 함수가 올바른 결과를 반환하지만 return 문이 제공되지 않는 이유는 무엇입니까?

분류에서Dev

Srand Seed가 결과를 바꾸지 않는 이유는 무엇입니까?

분류에서Dev

올바른 방법으로 읽기가 일관된 결과를 생성하지 않는 이유는 무엇입니까?

분류에서Dev

이 Firebase Function Promise가 올바른 오류를 반환하지 않는 이유는 무엇입니까?

분류에서Dev

이 코드가 올바른 해시를 생성하지 않는 이유는 무엇입니까?

분류에서Dev

내 Bit String to Hex String 코드가 결과를 인쇄하지 않는 이유는 무엇입니까?

분류에서Dev

PHP가 올바른 배열 수를 표시하지 않는 이유는 무엇입니까?

분류에서Dev

Dig가 올바른 IPv6 DNS 서버를 사용하지 않는 이유는 무엇입니까?

분류에서Dev

올바른 위치에 올바른 문자열을 추가하지 않는 이유는 무엇입니까?

분류에서Dev

올바른 순서로 인쇄되지 않는 이유는 무엇입니까?

분류에서Dev

CONVERT 함수가 결과를 반올림하는 이유는 무엇입니까?

분류에서Dev

XPath 유효성 검사기가 올바른 결과를 반환 할 때 XmlNode.SelectNodes가 빈 목록을 반환하는 이유는 무엇입니까?

분류에서Dev

copy_to_user ()가 필요한 이유는 무엇입니까?

분류에서Dev

LINQ GroupBy가 ToArray () 앞에 올 때 다른 결과를 생성하는 이유는 무엇입니까?

분류에서Dev

타이머 처리기 함수에서 copy_to_user 실패를 사용하는 이유는 무엇입니까?

분류에서Dev

올바른 바이트 수를 할당하지 않고 malloc이 작동하는 이유는 무엇입니까?

분류에서Dev

결과 신호가 올바르게 표시되지 않는 이유는 무엇입니까? MATLAB

분류에서Dev

이 자바 스크립트가 다른 결과를 제공하는 이유는 무엇입니까?

분류에서Dev

내 C 프로그램이 올바른 문자열을 인쇄하지 않는 이유는 무엇입니까?

분류에서Dev

내 C 프로그램이 올바른 문자열을 인쇄하지 않는 이유는 무엇입니까?

분류에서Dev

"cgps -s"가 결과를 제공하지 않는 이유는 무엇입니까?

분류에서Dev

내 코드의 함수로 인쇄 할 때 포인터를 직접 인쇄하면 다른 결과가 나타나는 이유는 무엇입니까?

분류에서Dev

그래프가 올바른 경로를 찾지 못하는 이유는 무엇입니까?

분류에서Dev

한 코드가 firebase에서 올바른 키를 제공하고 다른 코드는 제공하지 않는 이유는 무엇입니까?

분류에서Dev

자바 스크립트에서`{} + []`가`a = {} + []`와 다른 결과를 반환하는 이유는 무엇입니까?

Related 관련 기사

  1. 1

    내 코드가 올바른 최소 차이를 인쇄하지 않는 이유는 무엇입니까?

  2. 2

    이 코드가 올바른 결과를 반환하지 않는 이유는 무엇입니까?

  3. 3

    내 indexOf 값이 올바른 결과를 반환하지 않는 이유는 무엇입니까?

  4. 4

    OpenMP atomic and critical이 올바른 결과를 제공하지 않는 이유는 무엇입니까?

  5. 5

    C 함수가 올바른 결과를 반환하지만 return 문이 제공되지 않는 이유는 무엇입니까?

  6. 6

    Srand Seed가 결과를 바꾸지 않는 이유는 무엇입니까?

  7. 7

    올바른 방법으로 읽기가 일관된 결과를 생성하지 않는 이유는 무엇입니까?

  8. 8

    이 Firebase Function Promise가 올바른 오류를 반환하지 않는 이유는 무엇입니까?

  9. 9

    이 코드가 올바른 해시를 생성하지 않는 이유는 무엇입니까?

  10. 10

    내 Bit String to Hex String 코드가 결과를 인쇄하지 않는 이유는 무엇입니까?

  11. 11

    PHP가 올바른 배열 수를 표시하지 않는 이유는 무엇입니까?

  12. 12

    Dig가 올바른 IPv6 DNS 서버를 사용하지 않는 이유는 무엇입니까?

  13. 13

    올바른 위치에 올바른 문자열을 추가하지 않는 이유는 무엇입니까?

  14. 14

    올바른 순서로 인쇄되지 않는 이유는 무엇입니까?

  15. 15

    CONVERT 함수가 결과를 반올림하는 이유는 무엇입니까?

  16. 16

    XPath 유효성 검사기가 올바른 결과를 반환 할 때 XmlNode.SelectNodes가 빈 목록을 반환하는 이유는 무엇입니까?

  17. 17

    copy_to_user ()가 필요한 이유는 무엇입니까?

  18. 18

    LINQ GroupBy가 ToArray () 앞에 올 때 다른 결과를 생성하는 이유는 무엇입니까?

  19. 19

    타이머 처리기 함수에서 copy_to_user 실패를 사용하는 이유는 무엇입니까?

  20. 20

    올바른 바이트 수를 할당하지 않고 malloc이 작동하는 이유는 무엇입니까?

  21. 21

    결과 신호가 올바르게 표시되지 않는 이유는 무엇입니까? MATLAB

  22. 22

    이 자바 스크립트가 다른 결과를 제공하는 이유는 무엇입니까?

  23. 23

    내 C 프로그램이 올바른 문자열을 인쇄하지 않는 이유는 무엇입니까?

  24. 24

    내 C 프로그램이 올바른 문자열을 인쇄하지 않는 이유는 무엇입니까?

  25. 25

    "cgps -s"가 결과를 제공하지 않는 이유는 무엇입니까?

  26. 26

    내 코드의 함수로 인쇄 할 때 포인터를 직접 인쇄하면 다른 결과가 나타나는 이유는 무엇입니까?

  27. 27

    그래프가 올바른 경로를 찾지 못하는 이유는 무엇입니까?

  28. 28

    한 코드가 firebase에서 올바른 키를 제공하고 다른 코드는 제공하지 않는 이유는 무엇입니까?

  29. 29

    자바 스크립트에서`{} + []`가`a = {} + []`와 다른 결과를 반환하는 이유는 무엇입니까?

뜨겁다태그

보관