The heap region is initially empty, so at process startup, the beginning of the heap region is the same as the end and may thus be retrieved using sbrk(0).
In OS/161, the initial "break" must be page-aligned, and sbrk only need support values of amount that result in page-aligned "break" addresses. Other values of amount may be rejected. (This may simplify the implementation. On the other hand, you may choose to support unaligned values anyway, as that may simplify your malloc code.)
Traditionally, the initial "break" is specifically defined to be the end of the BSS (uninitialized data) region, and any amount, page-aligned or not, may legally be used with sbrk.
Ordinarily, user-level code should call malloc for memory allocation. The sbrk interface is intended only to be the back-end interface for malloc. Mixing calls to malloc and sbrk will likely confuse malloc and produces undefined behavior.
While one can lower the "break" by passing negative values of amount, one may not set the end of the heap to an address lower than the beginning of the heap. Attempts to do so must be rejected.
ENOMEM Sufficient virtual memory to satisfy the request was not available, or the process has reached the limit of the memory it is allowed to allocate. EINVAL The request would move the "break" below its initial value.